Я не могу понять, почему отправка WM_COPYDATA
из приложения VC ++ (Master) в приложение BCB (Slave) завершается неудачно, но из приложения BCB (Master) в приложение BCB (Slave) проходит. Я проверил HWND в режиме отладки в BCB и VC ++, они оба имеют одинаковое значение (0x00030BEE).
Ниже приведен мой код, это очень просто
V C Master (. cpp) (32-разрядная версия)
char ss[] = "1234";
HWND hwnd = ::FindWindowA(NULL, "12345678");//12345678 = Slave Window
COPYDATASTRUCT copydata;
memset(©data, 0, sizeof(copydata));
copydata.dwData = 0;
copydata.cbData = strlen(ss);
copydata.lpData = ss;
SendMessage(hwnd, WM_COPYDATA, (WPARAM)GetSafeHwnd(), (LPARAM)©data);
Мастер BCB (. cpp) (32-разрядная версия)
char ss[] = "1234";
HWND hwnd = ::FindWindow(NULL, "12345678");//12345678 = Slave Window
COPYDATASTRUCT copydata;
memset(©data, 0, sizeof(copydata));
copydata.dwData = 0;
copydata.cbData = strlen(ss);
copydata.lpData = ss;
::SendMessage(hwnd, WM_COPYDATA, (WPARAM)Application->Handle, (LPARAM)©data);
Единственное отличие между VC ++ и BCB GetSafeHwnd()
и Application->Handle
. После вызова FindWindow()
HWND в VC ++ и BCB имеет одинаковое значение (0x00030BEE).
Ведомый BCB (.h) (32-разрядный)
void __fastcall OnCopyData(TMessage &Msg);
BEGIN_MESSAGE_MAP
VCL_MESSAGE_HANDLER(WM_COPYDATA,TMessage, OnCopyData)
END_MESSAGE_MAP(TForm)
Ведомый BCB (. cpp)
void __fastcall TForm1::OnCopyData(TMessage &Msg)
{
::OutputDebugString("123");
}
Подчиненный BCB может получить сообщение от ведущего устройства BCB и вывести сообщение 123. Но он не может получить сообщение от мастера VC ++.
Я очень смущен. Кто-нибудь знает, как решить эту проблему?
Среда: Win7, Professional, 64 бита
![image](https://i.stack.imgur.com/WW1GF.png)