■64957 / ) |
Re[7]: 【VB2005、VB.NET】構造体のコピーについて |
□投稿者/ コンバート後に悩む人 (6回)-(2013/01/24(Thu) 19:09:31)
|
shuさんの手法で試したらうまく成功しました。 そこで、逆を試したところ以下の通りとなりました。
Dim b = New typBBBB() With {.strB = "11222333334444444"} が、ステートメントの終わりを指定してください。という旨のビルドエラーとなるため 以下のように書き換えました。
Dim a As New typAAAA Dim ptr As New IntPtr()
a.aaaa = "11" a.bbbb = "222" a.cccc = "33333" a.dddd = "4444444"
ptr = Marshal.AllocHGlobal(10000) '<---ここの数字は適当 Marshal.StructureToPtr(a, ptr, False)
Dim b As New typBBBB b = CType(Marshal.PtrToStructure(ptr, GetType(typBBBB)), typBBBB) Marshal.FreeHGlobal(ptr)
bの内容をみると1のみしかセットされていませんでした。 a.aaaaの最初の1のみ設定された感じでしょうか。 <MarshalAs(UnmanagedType.ByValTStr, SizeConst:=2)> Public aaaa As String は、実質1バイトとしてみなしてるようで、+1しなければならないようです。
bbbb.strB = "11222333334444444" とならず bbbb.strB = "1" となるため strBの宣言付近が問題あるのでしょうか。 もうちょっと考えてみます。
|
|