gpt4 book ai didi

c# - WM_COPYDATA 从 C++ 到 C#

转载 作者:行者123 更新时间:2023-11-30 18:35:36 26 4
gpt4 key购买 nike

我正在使用 Visual Studio 2010 开发 4 个应用程序(使用互联网上已建立的示例):2 个在 C++ MFC 中(名为:SenderCpp 和 ReceiverCpp),2 个在 C# 中(名为:SenderCsh 和 ReceiverCsh)以测试 WM_DATACOPY 进程间通信。

我的目标是让 C++ 应用程序“SenderCpp”向 C# 应用程序“ReceiverCsh”发送一些数据,但它不起作用,“ReceiverCsh”没有收到任何消息。

所以:

  • SenderCpp->ReceiverCpp:有效
  • SenderCsh->ReceiverCsh:有效
  • SenderCpp->ReceiverCsh:不工作

SenderCpp 代码是:

void SendCopyData(HWND hFind)
{
COPYDATASTRUCT cp;
StackRecord record;

record.CursorX = 1;
record.CursorY = -1;

_tcscpy(record.cmdline, L"Hello World!");
cp.cbData = sizeof(record);
cp.lpData = &record;
cp.dwData = 12;
SendMessage(hFind, WM_COPYDATA, NULL, (LPARAM)&cp);
}

void CCANDriverDlg::OnBnClickedButton2()
{
HWND hWnd = ::FindWindow(NULL, CString("ReceiverCpp"));
SendCopyData(hWnd);
}

void CCANDriverDlg::OnBnClickedButton1()
{
HWND hWnd = ::FindWindow(NULL, CString("ReceiverCsh"));
SendCopyData(hWnd);
}

ReceiverCsh 是:

 protected override void WndProc(ref Message m)
{
switch(m.Msg)
{
case WM_COPYDATA:
// Win32.CopyDataStruct st = (Win32.CopyDataStruct)Marshal.PtrToStructure(m.LParam, typeof(Win32.CopyDataStruct));
CopyDataStruct st = (CopyDataStruct)Marshal.PtrToStructure(m.LParam, typeof(CopyDataStruct));
//txtmessagereceive.Text = strData;

CANMessage MsgIn = new CANMessage(8);
MsgIn = (CANMessage)Marshal.PtrToStructure(st.lpData, typeof(CANMessage));

// Decode the marshaled message
txtmessagereceive.Text = "dwData = " + st.dwData.ToString() +"\r\n" +
"cbData = " + st.cbData + " bytes\r\n" +
"CANID = " + MsgIn.CANID.ToString() + "\r\n";
for (int i=0; i<8; i++)
{
txtmessagereceive.Text += String.Format("Data[{0}]={1}\r\n", i, MsgIn.Data[i]);
}

break;
default:
// let the base class deal with it
base.WndProc(ref m);
break;
}
}

使用 Spy++ 我看到监视“ReceiverCsh”时,当 SenderCpp 发送 WM_COPYDATA 时没有显示消息,而是在分析 ReceiverCpp 时显示消息。

你有什么想法吗?谢谢。

最佳答案

我想知道 ReceiverCsh 是否是控制台应用程序。为了使用 WndProc 覆盖,您需要有一个消息泵来接收外部消息。确保是这种情况。

参见 Handling Messages in Console Apps了解更多详情

关于c# - WM_COPYDATA 从 C++ 到 C#,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14756299/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com