掲示板システム
ホーム
アクセス解析
カテゴリ
ログアウト
構造体フィールドに2次元配列的な物は可能でしょうか? (ID:82949)
名前
ホームページ(ブログ、Twitterなど)のURL (省略可)
本文
初めてご質問させて頂きます。皆さん宜しくお願い致します。 VB.net初心者ためご教授して下さい。 VCで作成されたプログラムとCreateFileMappingで作成された共有メモリでデータのやり取りを行いたいのですが、下記の構造体自体が共有メモリとなります。 <VC側構造体宣言> typedef struct{ int Field1; short Field2[3][300] }MyStruct; 私の考えたコーディングですが、 <StructLayout(LayoutKind.Sequential)> _ Public Structure SHORT_300 <VBFixedArray(299), MarshalAs(UnmanagedType.ByValArray, SizeConst:=300)> _ Dim data() As Short Public Sub Init() ReDim data(299) End Sub End Structure <StructLayout(LayoutKind.Sequential)> _ Public Structure MyStruct Dim Field1 As Integer <VBFixedArray(2), MarshalAs(UnmanagedType.ByValArray, SizeConst:=3)> _ Dim Field2() As SHORT_300 Public Sub Field2_Init() ReDim Field2(2) End Sub End Structure と標準モジュール内で宣言して、Form_Load内で以下の初期化を行った後にMarshal.SizeOf(MyStruct)でMyStructのサイズを取得したいのですが以下のエラーが発生してしまいます。 <初期化> (ウォッチウィンドウで確認すると領域は確保されているみたいに思えるが正しいのかは定かです。) MyStruct.Field2_Init() MyStruct.Field2(0).Init() MyStruct.Field2(1).Init() MyStruct.Field2(2).Init() <エラー> 型 MyStruct はアンマネージ構造体として集成できません。有効なサイズ、またはオフセットの計算ができません。 <StructLayout(LayoutKind.Sequential)> _ Public Structure MyStruct Dim Field1 As Integer Dim Field2_1 As SHORT_300 Dim Field2_2 As SHORT_300 Dim Field2_3 As SHORT_300 End Structure <Form_Load内で初期化> MyStruct.Field2_1.Init() MyStruct.Field2_2.Init() MyStruct.Field2_3.Init() と定義すると正常なサイズが取得されるのですが、実際に1番目の素数が500とかなった場合は500個のフィールドを作成しなければならないので何か良い方法は有るのでしょうか?。 過去ログで同じようなご質問が有り、配列中の構造体一つ一つをマーシャリングすれば大丈夫と有りましてMSのサンプルを見ながら試してみたのですがいまいち分からず実現出来ていません。 出来ましたらご教授をお願い致します。
←解決時は質問者本人がここをチェックしてください。
戻る
掲示板システム
Copyright 2020 Takeshi Okamoto All Rights Reserved.