1

vb6でこのコードを使用してデータを送信しています

cds.dwData = CLng(RegisterWindowMessage("MyWMCopyData"))
cds.cbData = Len(Message) * 2 ' characters are 2-bytes each
cds.lpData = StrPtr(Message) ' access the string's character buffer directly
' Send the string.
Dim i As Long:i = SendMessage(lHwnd, WM_COPYDATA, MainForm.hwnd, cds)

コードを手伝ってくれませんか?私はこれを持っています

Dim B() As Byte
ReDim B(0 To tCDS.cbData - 1) As Byte
CopyMemory B(0), ByVal tCDS.lpData, tCDS.cbData
Dim sData As String
sData = Trim$(StrConv(B, vbUnicode))

私が送るならHello、私はそれを次のように受け取りますH e l l o

4

2 に答える 2

1

文字列変換を混同しています。

送信コードは、完全な Unicode 文字列へのポインターを送信します。それを受け取ったら、それをStrConv(..., vbUnicode)ANSI から Unicode に変換する に渡し、文字列データを「破損」させます。

これを解決するには、最後のバイト配列を文字列に直接割り当てる必要があります。

sData = B

または、文字列の長さを割り当てて直接コピーすることもできます。

Dim sData As String  
sData = String(tCDS.cbData / 2, vbNullChar) ' characters are 2-bytes each
CopyMemory ByVal StrPtr(sData), ByVal tCDS.lpData, tCDS.cbData
于 2012-09-27T10:42:10.993 に答える