はじめて書き込みさせて頂きます。
.NET2003 VBで、構造体のメンバ変数を連続した文字列として、
String変数へのコピーということはできるのでしょうか?
例えば、構造体「TestStruct」(※メンバ変数は全てString型)を、
String型の変数「strTest」にコピーした場合、「strTest」の結果は"01234567890ABCDE"といった具合です。
------------
Structure TestStruct
Public resCode As String ' サイズは10で"01234567890"と仮定
Public updMode As String ' サイズは5で"ABCDE"と仮定
End Structure
調べていると、VBはCと違って構造体要素のメモリが連続していないので、
RtlMoveMemory(CopyMemory)等や、構造体のアドレスを取得するのにStrPtrの代わりに「GCHandle.AddrOfPinnedObject」を使うということは分かりましたが、実装に至らない状態です。
申し訳ありませんがよろしくお願い致します。
> .NET2003 VBで、構造体のメンバ変数を連続した文字列として、
> String変数へのコピーということはできるのでしょうか?
Stringは「参照型」なので、単純にメモリコピーしても駄目ですね。
かわりに、
Dim X As TestStruct
S = X.resCode & X.updMode
のようにするか、もしくは、連結用メソッドを TestStruct に実装してみてはいかがでしょう。
http://madia.world.coocan.jp/cgi-bin/VBBBS/wwwlng.cgi?print+200406/04060083.txt
魔界の仮面弁士さん、お返事ありがとうございます。
>http://madia.world.coocan.jp/cgi-bin/VBBBS/wwwlng.cgi?print+200406/04060083.txt
上記のURLを参考に、以下のようにプロパティと連結用メソッドをTestStructに実装して対応することができました。
---------------
Structure TestStruct
Private _resCode As String
Private _updMode As String
' resCodeプロパティ
Property resCode() As String
Set(ByVal Value As String)
_resCode = LSet(Value, LEN_RESCODE)
End Set
Get
Return _resCode
End Get
End Property
' updModeプロパティ
Property updMode() As String
Set(ByVal Value As String)
_updMode = LSet(Value, LEN_UPDMODE)
End Set
Get
Return _updMode
End Get
End Property
' プロパティに設定されている文字列を全て結合する
Public Function getSendBufferJoin(ByVal testStruct As TestStruct) As String
Dim T As Type = GetType(TestStruct)
Dim strBuf As New String("")
For Each F As Reflection.PropertyInfo In T.GetProperties()
strBuf = strBuf & F.GetValue(testStruct, Nothing)
Next
Return strBuf
End Function
End Structure
---------------
実動作は富士通ホスト機とのバッファ送受信になるので、Byte型でのやりとりになりますが、全体的な動きを理解することができました。
どうもありがとうございました。
すいません、解決時のチェックを入れ忘れていました。
編集 削除