C# と VB.NET の質問掲示板

わんくま同盟

ASP.NET、C++/CLI、Java 何でもどうぞ

C# と VB.NET の入門サイト


(過去ログ 109 を表示中)
■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の宣言付近が問題あるのでしょうか。
もうちょっと考えてみます。


返信 編集キー/


管理者用

- Child Tree -