私たちのクライアントは、データを構造体から文字列に移動して、メインフレームに出荷できるようにする必要があります。私たちのプロセスは、基本的に文字列から構造体にデータをマーシャリングすることです。この部分は簡単でした...
私は今、逆のことをしようとしていますが、いくつかの困難に直面しています。これが私が取り組んでいるテスト構造です。
<StructLayout(LayoutKind.Sequential, CharSet:=CharSet.Unicode)> _
Public Structure Contact
<MarshalAs(UnmanagedType.ByValTStr, SizeConst:=50)> _
Public Address As String
<MarshalAs(UnmanagedType.ByValTStr, SizeConst:=20)> _
Public FirstName As String
<MarshalAs(UnmanagedType.ByValTStr, SizeConst:=20)> _
Public LastName As String
<MarshalAs(UnmanagedType.ByValTStr, SizeConst:=12)> _
Public PhoneNumber As String
End Structure
ここに私が使用しているテスト方法があります:
Public Sub TestContactToString()
Dim contact As New Contact
contact.Address = "123 Main st."
contact.FirstName = "Bob"
contact.LastName = "Builder"
contact.PhoneNumber = "613-828-1233"
Dim unmanagedAddress As IntPtr = Marshal.AllocHGlobal(Marshal.SizeOf(contact))
Marshal.StructureToPtr(contact, unmanagedAddress, True)
Dim result As String = Marshal.PtrToStringUni(unmanagedAddress)
Marshal.FreeHGlobal(unmanagedAddress)
unmanagedAddress = IntPtr.Zero
End Sub
現在、結果変数は構造体「アドレス」の最初のフィールドのみを取得しています...ポインタに十分なスペースが割り当てられていないように見えますか? 残りのデータを文字列に入れる方法を考えています...
どんな助けでも大歓迎です!
ありがとうございました。