从C+发送消息+;到Delphi X 我试图从C++控制台应用程序向Windows 10上的Delphi X应用程序发送一条消息,但由于某种原因它无法工作。 下面是我的C++代码: int _tmain(int argc, _TCHAR* argv[]) { CString dataToSend = _T("MY DATA"); COPYDATASTRUCT cds; cds.dwData = 1; // can be anything cds.cbData = sizeof(TCHAR) * (_tcslen(dataToSend) + 1); cds.lpData = (void*)dataToSend.GetBuffer(cds.cbData); HWND hwndFound; // This is what is returned to the caller. hwndFound = FindWindow(_T("TMyForm"), 0); if (hwndFound) { printf("WINDOW IS FOUND %i... Sending a message...\n", hwndFound); SendMessage(hwndFound, WM_COPYDATA, (WPARAM)hwndFound, (LPARAM)(LPVOID)&cds); } else { printf("WINDOW IS NOT FOUND!\n"); } char* end = ""; printf("Press enter to continue..."); scanf(end); return 0; }

从C+发送消息+;到Delphi X 我试图从C++控制台应用程序向Windows 10上的Delphi X应用程序发送一条消息,但由于某种原因它无法工作。 下面是我的C++代码: int _tmain(int argc, _TCHAR* argv[]) { CString dataToSend = _T("MY DATA"); COPYDATASTRUCT cds; cds.dwData = 1; // can be anything cds.cbData = sizeof(TCHAR) * (_tcslen(dataToSend) + 1); cds.lpData = (void*)dataToSend.GetBuffer(cds.cbData); HWND hwndFound; // This is what is returned to the caller. hwndFound = FindWindow(_T("TMyForm"), 0); if (hwndFound) { printf("WINDOW IS FOUND %i... Sending a message...\n", hwndFound); SendMessage(hwndFound, WM_COPYDATA, (WPARAM)hwndFound, (LPARAM)(LPVOID)&cds); } else { printf("WINDOW IS NOT FOUND!\n"); } char* end = ""; printf("Press enter to continue..."); scanf(end); return 0; },c++,delphi,C++,Delphi,这是我的Delphi代码: private procedure WMCopyData(var Msg : TWMCopyData); message WM_COPYDATA; .... procedure TMyForm.WMCopyData(var Msg: TWMCopyData); var s : AnsiString; begin s := PAnsiChar(Msg.CopyDataStruct.lpData) ; ShowMessage(s); end;

这是我的Delphi代码:

private
    procedure WMCopyData(var Msg : TWMCopyData); message WM_COPYDATA;
....


procedure TMyForm.WMCopyData(var Msg: TWMCopyData);
var
   s : AnsiString;
begin
   s := PAnsiChar(Msg.CopyDataStruct.lpData) ;
   ShowMessage(s);
end;

....

procedure TMyForm.MyButtonClick(Sender: TObject);
begin
   // Checking my handle
   ShowMessage(IntToStr(Handle));
end
C++应用程序说它找到了一个句柄:

窗口是3609366。。。正在发送消息。。。 按enter继续

当我按下MyButton(3609366)时,会显示相同的手柄,但消息框不会出现。 由于某些原因,Delphi应用程序未收到该消息

你知道为什么吗


P.S:它们运行在同一个用户帐户下。

< p>您正在向Delphi发送WMULUSER + 1消息,但没有在Delphi中听到该消息。

在侧注上,Delphi代码期待“代码> ANSICHAR< < /Cord>数据,因此您不应该在C++代码中使用<代码> TCHAR < /代码>。此外,VCL在内部使用
WM_COPYDATA
,因此在解释
lpData
之前,您必须先查看
dwData
(对于
dwData
值,您应该使用
RegisterWindowMessage()
)。而且
WM_COPYDATA
WPARAM
必须是发送方的
HWND
,而不是接收方。有用的信息-谢谢!编辑问题后,此答案不再适用。请注意。谢谢