SendMessage WM_COPYDATA msg От V C до BCB: сбой, но от BCB до BCB: пройти - PullRequest
0 голосов
/ 10 февраля 2020

Я не могу понять, почему отправка 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(&copydata, 0, sizeof(copydata));
copydata.dwData = 0;
copydata.cbData = strlen(ss);
copydata.lpData = ss;
SendMessage(hwnd, WM_COPYDATA, (WPARAM)GetSafeHwnd(), (LPARAM)&copydata);

Мастер BCB (. cpp) (32-разрядная версия)

char ss[] = "1234";
HWND hwnd = ::FindWindow(NULL, "12345678");//12345678 = Slave Window
COPYDATASTRUCT copydata;
memset(&copydata, 0, sizeof(copydata));
copydata.dwData = 0;
copydata.cbData = strlen(ss);
copydata.lpData = ss;
::SendMessage(hwnd, WM_COPYDATA, (WPARAM)Application->Handle, (LPARAM)&copydata);

Единственное отличие между 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

1 Ответ

0 голосов
/ 13 февраля 2020

Из комментария Реми Лебо измените настройку Visual C ++ или вызов ChangeWindowMessageFilterEx может решить этот вопрос.

enter image description here

...