You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.14 12:31:00