- - PR -
[C#] C の構造体を C# で
1
投稿者 | 投稿内容 | ||||
---|---|---|---|---|---|
|
投稿日時: 2002-10-30 11:09
こんにちは。
C で定義した下記のような構造体を C# で使用しようとしています。 typedef struct { int code; int num; } _STRUCT_B; typedef struct { char id[3]; _STRUCT_B structB[5]; } _STRUCT_A; C# では、下記ように定義してメモリの割り当てを行っています。 コンパイルエラーは出ませんが、実行時に構造体のサイズを チェックする箇所で例外が発生します。 [StructLayout(LayoutKind.Sequential, Pack=1)] struct _STRUCT_B { public int code; public int num; } [StructLayout(LayoutKind.Sequential, Pack=1)] struct _STRUCT_A { [MarshalAs(UnmanagedType.ByValArray, SizeConst=3] public char [] id; // ここに何か必要? public _STRUCT_B [] structB; } _STRUCT_A structA = new _STRUCT_A(); structA.id = new char [3]; structA.structB = new _STRUCT_B [5]; int size = Marshal.SizeOf( structA ); _STRUCT_B の要素数(この場合は 5)をどこかで定義しなければならない と思って色々とやってみましたが、どうもうまくいきませんでした。 よろしくお願いします。m(_ _)m [ メッセージ編集済み 編集者: ひでたつ 編集日時 2002-10-30 11:11 ] | ||||
|
投稿日時: 2002-10-30 11:33
ちなみに、何の例外が出ていますか? | ||||
|
投稿日時: 2002-10-30 11:42
「型 _STRUCT_A はアンマネージ構造体として集成できません。有効なサイズ、またはオフセットの計算ができません。」
というものです。 | ||||
|
投稿日時: 2002-10-30 12:17
確認ですけど [StructLayout(LayoutKind.Sequential, Pack=1)] struct _STRUCT_A { [MarshalAs(UnmanagedType.ByValArray, SizeConst=3] public char [] id; [MarshalAs(UnmanagedType.ByValArray, SizeConst=5] public _STRUCT_B [] structB; } ではうまくいかなかったということですよね? | ||||
|
投稿日時: 2002-10-30 12:46
そうです。うまくいきませんでした。
説明不足ですみません。 [ メッセージ編集済み 編集者: ひでたつ 編集日時 2002-11-02 14:01 ] |
1