- - PR -
構造体定義変数のサイズ取得(VB.NET)
1
投稿者 | 投稿内容 |
---|---|
|
投稿日時: 2008-07-16 20:18
お世話になります。初心者です。
変数のサイズを取得したいのですがエラーとなりサイズが取得できません。 <環境> WIndowsXP,VB.NET2005 <コード> +++ Module1.VB +++ Public Const MAX_ROW As Short = 2 Public gstAAA(MAX_ROW) As ST_AAA ' 構造体宣言 <StructLayout(LayoutKind.Sequential, CharSet:=CharSet.Ansi, Pack:=4)> _ Public Structure ST_AAA <VBFixedArray(2), MarshalAs(UnmanagedType.ByValTStr, SizeConst:=3)> _ Public sCode As String <VBFixedArray(4), MarshalAs(UnmanagedType.ByValTStr, SizeConst:=5)> _ Public sName As String End Structure +++ Form1.VB +++ '変数のサイズを出力 Debug.WriteLine(String.Format("ST_AAA size={0} ", Marshal.SizeOf(gstAAA))) <エラーメッセージ> Sample.Module1+ST_AAA[]' はアンマネージ構造体としてマーシャリングできません。有効なサイズ、またはオフセットの計算ができません。 既設システムのVB6.0のコードをVB.NETにコンバートしなければならないのですが、 VB6.0では上記のような変数定義が多々あり、なんとか既設コードを変えない様に コンバートできればと試行錯誤している所でつまずいています。 どなたか解決策ご存知ないでしょうか。 よろしくお願いします。 |
|
投稿日時: 2008-07-16 21:35
Marshal.SizeOf に配列は渡せません。
配列要素の一つを渡してサイズを取得し、それに配列の要素数を掛けてください。 |
|
投稿日時: 2008-07-17 09:19
返信ありがとうございます。
>Marshal.SizeOf に配列は渡せません。 >配列要素の一つを渡してサイズを取得し、それに配列の要素数を掛けてください。 最悪、このやり方しかないのかなと思っていたのですが。 やっぱり無理なんですね。 この手法でやっていきたいと思います。 ご教授ありがとうございました。 |
1