我試圖用WM_COPYDATA從一個窗口發送到另一個字符串。我的接收窗口完全收到了訊息。除了我發送的字符串不會保持不變。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;
現在發生的事情是被調用輸出中國的信件在MessageBox 。
我的猜測是,我並沒有轉換是正確的,或者說,我並沒有真正發送字符串,但只是指向它的指針,這給在接收機的窗口完全不同的數據。我不知道如何解決它。
在這兩種情況下,您都使用'TCHAR'作爲數據類型。兩種應用程序的構建類型(ANSI/Unicode)一樣的嗎? – Jon
(TCHAR *)是定義一個TCHAR文字錯誤的方式。使用_T(...)宏。 –
@喬恩我打算用我的代碼在DLL中以後,可以通過兩種ANSI/Unicode的被稱爲這是我爲什麼選擇使用TCHAR的原因 –