- PR -

構造体定義変数のサイズ取得(VB.NET)

1
投稿者投稿内容
とし@NNN
会議室デビュー日: 2006/01/28
投稿数: 5
投稿日時: 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では上記のような変数定義が多々あり、なんとか既設コードを変えない様に
コンバートできればと試行錯誤している所でつまずいています。
どなたか解決策ご存知ないでしょうか。
よろしくお願いします。
Hongliang
ぬし
会議室デビュー日: 2004/12/25
投稿数: 576
投稿日時: 2008-07-16 21:35
Marshal.SizeOf に配列は渡せません。
配列要素の一つを渡してサイズを取得し、それに配列の要素数を掛けてください。
とし@NNN
会議室デビュー日: 2006/01/28
投稿数: 5
投稿日時: 2008-07-17 09:19
返信ありがとうございます。

>Marshal.SizeOf に配列は渡せません。
>配列要素の一つを渡してサイズを取得し、それに配列の要素数を掛けてください。
最悪、このやり方しかないのかなと思っていたのですが。
やっぱり無理なんですね。
この手法でやっていきたいと思います。

ご教授ありがとうございました。
1

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