1

構造体のメモリ サイズを読み取ろうとすると、例外が発生します。

「タイプ 'UInt16' のフィールド 'cbSize' を持つ構造体のファイル I/O は無効です。」

私の構造:

 <StructLayout(LayoutKind.Sequential, CharSet:=CharSet.Ansi, Pack:=1)>
 Public Structure MyStructure
    Public V1 As UInt16         

    <MarshalAs(UnmanagedType.ByValTStr, SizeConst:=30)> _
    Public V2 As String 
    Public V3 As Integer             
    <MarshalAs(UnmanagedType.ByValTStr, SizeConst:=256)> _
    Public V4 As String    
    Public V5 As Byte         
    Public V6 As Byte            
    Public V7 As UInt16        
    Public V8 As UInt16         
    Public V9 As UInt16       


    Public V10 As Integer            
    Public V11 As Integer      
    <MarshalAs(UnmanagedType.ByValTStr, SizeConst:=8)> _
    Public V12 As String  
 End Structure

各 Len(Vxx) の値をカウントする関数を作成しました。この関数は機能しますが、間違った値を取得しています...

 size = Len(V1) + Len(V2) + Len(V3) ....

値の Type を Int16 に変更すると、Len(構造) に問題はありません。

私の質問: UInt16 で動作しないのはなぜですか?

UInt16 を使用して Len() から正しい値を取得する方法はありますか?

ご提案いただきありがとうございます。

4

1 に答える 1