構造体t_MainDataのデータエリアを動的に複数連続で取得したいのですが、
下記宣言ではうまく取得できません。
Structureの宣言の間違いが分かりません。
教えてください。よろしくお願いします。
<StructLayout(LayoutKind.Sequential)> _
Public Structure t_Date
Public lYear As Integer
Public lmonth As Integer
Public lDay As Integer
End Structure
<StructLayout(LayoutKind.Sequential, Pack:=1, CharSet:=CharSet.Ansi)> _
Public Structure t_MainData
<VBFixedArray(2), MarshalAs(UnmanagedType.ByValArray, SizeConst:=3)> _
Public AAA() As t_Date
Public BBB As Single
<VBFixedArray(1439), MarshalAs(UnmanagedType.ByValArray, SizeConst:=1439)> _
Public CCC() As Single
Public DDD As Single
<VBFixedArray(23), MarshalAs(UnmanagedType.ByValArray, SizeConst:=23)> _
Public EEE() As Integer
Public FFF As Integer
Public Sub initialize()
ReDim AAA(2)
ReDim CCC(1439)
ReDim EEE(23)
End Sub
End Structure
Public mData() as t_MainData
一般的には、MarshalAs属性を使うときは、独自に定義した構造体の
配列をメンバーとしては用いない、ようにするのが無難でしょう。
それが嫌ならカスタムマーシャリングとか。
但し今回のケースでは、まず構造体として定義せず、クラスとして
定義すること、辺りが無難ではないかと。
K.J.Kさん、すいませんが教えてください。
クラスで定義するとどう無難なのかよく分かりませんが、
クラスとして定義すると、連続エリアとして取得できるのでしょうか?
先頭アドレスとデータサイズを引数としてdllコールし、データを構造体に取得するのが目的です。
よろしくお願いします。
ツイート | ![]() |