- PR -

[C#] C の構造体を C# で

1
投稿者投稿内容
ひでたつ
常連さん
会議室デビュー日: 2002/08/09
投稿数: 28
お住まい・勤務地: 岩手県
投稿日時: 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 ]
DaikiRyuto
大ベテラン
会議室デビュー日: 2002/07/23
投稿数: 200
投稿日時: 2002-10-30 11:33
引用:

C# では、下記ように定義してメモリの割り当てを行っています。
コンパイルエラーは出ませんが、実行時に構造体のサイズを
チェックする箇所で例外が発生します。



ちなみに、何の例外が出ていますか?
ひでたつ
常連さん
会議室デビュー日: 2002/08/09
投稿数: 28
お住まい・勤務地: 岩手県
投稿日時: 2002-10-30 11:42
「型 _STRUCT_A はアンマネージ構造体として集成できません。有効なサイズ、またはオフセットの計算ができません。」

というものです。
DaikiRyuto
大ベテラン
会議室デビュー日: 2002/07/23
投稿数: 200
投稿日時: 2002-10-30 12:17
引用:

[StructLayout(LayoutKind.Sequential, Pack=1)]
struct _STRUCT_A
{
 [MarshalAs(UnmanagedType.ByValArray, SizeConst=3]
 public char [] id;
 // ここに何か必要?
 public _STRUCT_B [] structB;
}



確認ですけど
[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/08/09
投稿数: 28
お住まい・勤務地: 岩手県
投稿日時: 2002-10-30 12:46
そうです。うまくいきませんでした。
説明不足ですみません。

[ メッセージ編集済み 編集者: ひでたつ 編集日時 2002-11-02 14:01 ]
1

スキルアップ/キャリアアップ(JOB@IT)