我在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
答案 0 :(得分: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
答案 1 :(得分:0)
字符串采用Unicode格式
在uncode中,每个单个字符占用2个字节,因为ASCII只有1个字节,所以我认为vb用空格填充另一个字节(可能)