VB.netで構造体の配列の配列を作成する必要があります。このエラーをマーシャリングしている間にエラーが発生しています。私はこの構造体の配列をDll関数に渡す必要があります。VB.netマーシャリングエラー
コード: 構造宣言:initiallizationとマーシャリングの
<StructLayout(LayoutKind.Sequential, CharSet:=CharSet.Ansi)> _
Public Structure dx_entry
<MarshalAs(UnmanagedType.ByValTStr, SizeConst:=10)> _
Public dx As String
<MarshalAs(UnmanagedType.ByValTStr, SizeConst:=3)> _
Public type As String
<MarshalAs(UnmanagedType.ByValTStr, SizeConst:=1)> _
Public narray As String
<MarshalAs(UnmanagedType.ByValTStr, SizeConst:=1)> _
Public ctier As String
<MarshalAs(UnmanagedType.ByValTStr, SizeConst:=1)> _
Public poa As String
<MarshalAs(UnmanagedType.ByValTStr, SizeConst:=1)> _
Public poa_rsvd As String
<MarshalAs(UnmanagedType.ByValTStr, SizeConst:=81)> _
Public filler As String
End Structure
コード:
Dim stpDx(2) As dx_entry
stpDx(1).dx = "5939" & Space(6)
stpDx(1).type = "BK" & Space(1)
stpDx(1).narray = Space(1)
stpDx(1).ctier = Space(1)
stpDx(1).poa = "Y"
stpDx(1).poa_rsvd = Space(1)
stpDx(1).filler = Space(81)
stpDx(2).dx = "1231" & Space(6)
stpDx(2).type = "BF" & Space(1)
stpDx(2).narray = Space(1)
stpDx(2).ctier = Space(1)
stpDx(2).poa = "Y"
stpDx(2).poa_rsvd = Space(1)
stpDx(2).filler = Space(81)
Dim pDxBuf As IntPtr = Marshal.AllocHGlobal(Marshal.SizeOf(stpDx))
Marshal.StructureToPtr(stpDx, pDxBuf, False)
ezg_Block.pDx = pDxBuf
私は、次のエラーを取得しています:
An unhandled exception of type 'System.ArgumentException' occurred in Audit_Demo_2307.exe
追加情報:タイプdx_entryを[ ]をアンマネージ構造としてマーシャリングすることはできません。意味のあるサイズまたはオフセットを計算することはできません。
おかげで、私に知らせてくださいどのように私はこれを行うに行く必要があります。 実際には、この構造体には関数呼び出しの後に更新される値があります。 – Yogi
フレドリックに心から感謝します。このソリューションは私のために働いています。私はあなたの助けを借りて、私はC言語で構造体型の変数を含む連合を持っています。私はVB.net でそれをマーシャリングするために、以下の方法を使用するパブリック構造grpr_output_block1 コードに使用drg_grpr_block1 末端構造などの公共DRG - 機能 にポインタとして渡しますIntPtr = Marshal.AllocHGlobal(偽stpGob1、pGob1Buf、)(Marshal.SizeOfstpGob1) Marshal.StructureToPtr Ezg_Block.pGob1 = pGob1Bufとしてgrpr_output_block1 薄暗いpGob1Bufとして暗いstpGob1 はそれが右のマーシャルのですか? –
Yogi