2012-04-24 11 views
7

In C++ è possibile utilizzare il dichiaratore __declspec(align(#)) per controllare l'allineamento dei dati definiti dall'utente. Come può farlo per C#. Ho due procedure scritte su Assembler nella mia DLL. Gli argomenti per le procedure (due array) devono essere allineati su 16 byte. Per C++ funziona bene.C# controlla l'allineamento dei dati

I Dichiarazioni appena usato

__declspec(align(16)) 
double a[2]={10.2,10.6}; 
+2

forse ci dovrebbe dire ciò che si vuole fare, piuttosto che (o in aggiunta a) come si dovrebbe farlo in un'altra lingua. – Servy

+4

@Servy: Francamente ho pensato che fosse abbastanza chiaro su ciò che voleva fare; fornire un esempio in una lingua diversa è normale. – NotMe

+0

@ChrisLively Non è sbagliato, semplicemente non lo considero sufficiente. Limiti le risposte a persone che hanno familiarità con la funzionalità dell'altro linguaggio. Anche una porta diretta non è sempre l'idea tra le lingue. Se il problema di fondo è noto, è possibile utilizzare una soluzione più appropriata per la lingua. – Servy

risposta

8

Se siete alla ricerca di riuscita a non gestiti Interop (la trasmissione di dati tra C# /. NET-based e/C++/software assembler a base di C), è sarebbe utilizzare una combinazione dell'attributo StructLayout e l'attributo FieldOffset:

[StructLayout(LayoutKind.Explicit, Pack = 16)] 
public class MyDataClass { 
    [FieldOffset(0)] 
    double[] a; 
} 

Secondo MSDN:

Il campo System.Runtime.InteropServices.StructLayoutAttribute.Pack determina l'allineamento della memoria dei campi di dati di un oggetto di destinazione.

http://support.microsoft.com/kb/922785

+0

Se la mia risposta è stata di aiuto a voi, si prega di contrassegnarlo come corretto ... –

+0

Downvoter, cura di commentare? –

Problemi correlati