我不明白为什么从VC ++应用程序(Master)向BCB应用程序(Slave)发送WM_COPYDATA
失败,但是从BCB应用程序(Master)到BCB应用程序(Slave)传递失败。我已经在BCB和VC ++中以调试模式验证了HWND,它们都是相同的值(0x00030BEE)。
以下是我的代码,非常简单
VC 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()
后,VC ++和BCB中的HWND是相同的值(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,专业版,64位