7

C ++では、__declspec( align( # ) )宣言子を使用してユーザー定義データの配置を制御できます。C#でこれを行うにはどうすればよいですか。dllのアセンブラに2つのプロシージャが記述されています。プロシージャ(2つの配列)の引数は、16バイトに揃える必要があります。C ++の場合、正常に動作します。

宣言を使用しました

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

1 に答える 1

9

管理対象から非管理対象への相互運用(C#/.NET ベースのソフトウェアと C/C++/アセンブラー ベースのソフトウェアの間でデータを送信する)StructLayoutを探している場合は、属性と属性の組み合わせを使用しFieldOffsetます。

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

MSDNによると:

System.Runtime.InteropServices.StructLayoutAttribute.Pack フィールドは、ターゲット オブジェクトのデータ フィールドのメモリ配置を決定します。

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

于 2012-04-24T20:39:20.217 に答える