連続エリア取得する構造体宣言は?


キムチ  2005-08-22 23:11:35  No: 124322

構造体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


K.J.K.  2005-08-22 23:24:15  No: 124323

一般的には、MarshalAs属性を使うときは、独自に定義した構造体の
配列をメンバーとしては用いない、ようにするのが無難でしょう。

それが嫌ならカスタムマーシャリングとか。

但し今回のケースでは、まず構造体として定義せず、クラスとして
定義すること、辺りが無難ではないかと。


キムチ  2005-08-23 01:27:26  No: 124324

K.J.Kさん、すいませんが教えてください。
クラスで定義するとどう無難なのかよく分かりませんが、
クラスとして定義すると、連続エリアとして取得できるのでしょうか?
先頭アドレスとデータサイズを引数としてdllコールし、データを構造体に取得するのが目的です。
よろしくお願いします。


※返信する前に利用規約をご確認ください。

※Google reCAPTCHA認証からCloudflare Turnstile認証へ変更しました。






  このエントリーをはてなブックマークに追加