gpt4 book ai didi

c++ - WM_COPYDATA 无法正确传送我的字符串

转载 作者:搜寻专家 更新时间:2023-10-31 01:45:56 31 4
gpt4 key购买 nike

我尝试使用 WM_COPYDATA 将字符串从一个窗口发送到另一个窗口。我的接收窗口完美地接收了消息。除了我发送的字符串不完整。

这是我在发送应用程序中的代码:

 HWND wndsend = 0;
wndsend = FindWindowA(0, "Receiving window");
if(wndsend == 0)
{
printf("Couldn't find window.");
}

TCHAR* lpszString = (TCHAR*)"De string is ontvangen";
COPYDATASTRUCT cds;
cds.dwData = 1;
cds.cbData = sizeof(lpszString);
cds.lpData = (TCHAR*)lpszString;
SendMessage(wndsend, WM_COPYDATA, (WPARAM)hwnd, (LPARAM)(LPVOID)&cds);

这是接收应用程序中的代码:

 case WM_COPYDATA :
COPYDATASTRUCT* pcds;
pcds = (COPYDATASTRUCT*)lParam;
if (pcds->dwData == 1)
{
TCHAR *lpszString;
lpszString = (TCHAR *) (pcds->lpData);
MessageBox(0, lpszString, TEXT("clicked"), MB_OK | MB_ICONINFORMATION);
}

return 0;

现在发生的是被调用的消息框输出中文字母。

我的猜测是我没有正确转换它,或者我实际上没有发送字符串而只是发送指向它的指针,这在接收者的窗口中给出了完全不同的数据。虽然我不知道如何修复它。

最佳答案

sizeof(lpszString) 是指针的大小,但您需要以字节为单位的缓冲区大小。您需要使用:

sizeof(TCHAR)*(_tcsclen(lpszString)+1)

读取字符串的代码应该注意不要通过读取提供给它的 cbData 的值来读取缓冲区的末尾。

请记住 sizeof 在编译时求值。当您使用它时,请牢记这一点,如果您发现自己将 sizeof 用于您知道是动态的东西,请退后一步。

作为额外的免费建议,我建议您停止使用 TCHAR 并选择一个字符集。我会推荐 Unicode。因此,使用 wchar_t 代替 TCHAR。您已经在构建一个 Unicode 应用程序。

关于c++ - WM_COPYDATA 无法正确传送我的字符串,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21380704/

31 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com