2012-04-24 8 views
7

In C++ können Sie __declspec(align(#)) Deklarator verwenden, um die Ausrichtung von benutzerdefinierten Daten zu steuern. Wie kann dies für C# getan werden. Ich habe zwei Prozeduren auf Assembler in meiner DLL geschrieben. Argumente für Prozeduren (zwei Arrays) sollten auf 16 Bytes ausgerichtet sein. Für C++ funktioniert es gut.C# Kontrolle der Ausrichtung von Daten

ich nur verwendet Erklärungen

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

vielleicht sollten Sie uns sagen, was Sie nicht tun wollen (oder zusätzlich zu), wie Sie es in einer anderen Sprache tun würde. – Servy

+4

@Servy: Ehrlich gesagt dachte ich, dass er ziemlich klar ist, was er machen will; ein Beispiel in einer anderen Sprache zu geben ist normal. – NotMe

+0

@ChrisLively Es ist nicht falsch, ich halte es einfach nicht für ausreichend. Sie beschränken die Reaktionen auf Personen, die mit der Funktionalität der anderen Sprache vertraut sind. Ein direkter Port ist auch nicht immer Idee zwischen Sprachen. Wenn das zugrunde liegende Problem bekannt ist, kann eine der Sprache angemessene Lösung verwendet werden. – Servy

Antwort

8

Wenn Sie Sie nicht verwaltete Interop (Übertragung von Daten zwischen C# /. NET-basierten und C/C++/Assembler-basierten Software), für verwaltete suchen würde eine Kombination aus dem StructLayout Attribut und das Attribut FieldOffset:

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

Laut MSDN:

Das Feld System.Runtime.InteropServices.StructLayoutAttribute.Pack bestimmt die Speicherausrichtung von Datenfeldern eines Zielobjekts.

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

+0

Wenn meine Antwort Ihnen zu Hilfe kam, bitte markieren Sie es als korrekt ... –

+0

Downvoter, interessieren sich zu kommentieren? –