C++发送WM_COPYDATA至Delphi接收时字符串异常求助
WM_COPYDATA跨语言通信字符串接收异常问题
代码实现
C++发送端代码
string data_to_send = "Hello World"; PCSTR lpszString = data_to_send.c_str(); COPYDATASTRUCT cds; cds.dwData = 0; // 可自定义值 cds.cbData = sizeof(TCHAR) * (data_to_send.size()); cds.lpData = &lpszString; cout << lpszString << endl; SendMessage(Output, WM_COPYDATA, (WPARAM)Output, (LPARAM)(PVOID)&cds);
Delphi接收端代码
var p : PCopyDataStruct; s : UTF8String; begin p := PCopyDataStruct(Message.lParam); if (p <> nil) then begin SetString(s, PAnsiChar(p^.lpData), p^.cbData); ShowMessage(s); end else inherited; end;
异常表现
接收的字符串显示异常,调试时的值为:
'l'#$FE#$F6#2'Hello World'#0#$10#3#$88'u'#$B#0
可见总长度为22字节,消息内容前多了4字节无效数据。
若将C++代码中的sizeof(TCHAR)替换为sizeof(CHAR),总长度变为11字节,但依然存在4字节偏移问题,调试值为:
#$18#$F9#$1B#3'Hello W'
更新:问题已解决
感谢Remy Lebeau和David Heffernan的帮助,他们提供的代码实现了预期的字符串传输功能,问题已解决。
内容的提问来源于Stack Exchange,提问作者Agnius Igres
相关产品推荐
相关产品推荐

