更新 : 2007 年 11 月
マーシャリングのために、配列や文字列を構造体に埋め込むことができます。埋め込まれた文字列がマーシャリングされる方法を指定するには、MarshalAsAttribute 属性を使用する必要があります。使用しない場合は、例外がスローされます。
文字列を wchar_t*, にマーシャリングする場合は、次のいずれかの属性を指定すると、Unicode 文字列へのポインタとしてマーシャリングされます。
[MarshalAs(UnmanagedType.LPWStr)]
または
[MarshalAs(UnmanagedType.LPTStr)]
次の表は、配列および文字列をアンマネージ コードからマネージ コードへマーシャリングするための構造体の定義を示しています。一部の例では、MarshalAsAttribute を使用していることに注意してください。
マーシャリングするデータ |
アンマネージ構造体 (C++) |
マネージ構造体 (C#) |
---|---|---|
整数の配列 |
|
|
文字の配列 |
|
|
文字の配列から文字列へ |
|
|
文字列へのポインタ |
|
|
構造体のレイアウトの指定
StructLayoutAttribute 属性を使用して、プラットフォーム呼び出しマーシャラに対する構造体のレイアウトを指定できます。.NET Compact Framework では、LayoutKind 列挙型値である Auto (既定)、Sequential、および Explicit の 3 つすべてをサポートしています。
.NET Compact Framework では、Auto は Sequential と同等です。
Explicit 値を指定する場合は、すべてのフィールドに FieldOffsetAttribute 属性を適用する必要があります。バイト値は、型の範囲内である必要があります。たとえば、2 バイト整数は偶数アドレスから開始し、4 バイト整数は 4 で割り切れるアドレスから開始する必要があります。
StructLayoutAttribute.Pack フィールドはサポートされていないことに注意してください。