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 回答
0

字符串为 Unicode 格式

在 uncode 中,每个单个字符占用 2 个字节,因为 ASCII 只是 1 个字节,所以我认为 vb 用空格填充另一个字节(也许)

于 2012-10-09T08:40:27.447 回答