.NET 客户端 - MFC 常规 DLL 和用户定义的消息

Posted

技术标签:

【中文标题】.NET 客户端 - MFC 常规 DLL 和用户定义的消息【英文标题】:.NET Client - MFC Regular DLL and user defined messages 【发布时间】:2010-12-02 23:52:00 【问题描述】:

更新:这是一个调用常规 DLL 的 .NET 客户端。我还有另一个扩展 DLL,它导出一些类并在常规 DLL 中使用。

我有一个第三方 DLL,它接受一个 WindowHandle 和一个用户定义的消息作为参数,并开始向传递的窗口发送消息,但我没有看到任何消息进入我的窗口。 API调用格式如下:

StartMessaging(<WindowHandle>,WM_MESSAGE_API);

我需要一个常规的 MFC 常规 DLL,它将创建一个隐藏的 CFrameWnd 窗口,仅用于接收消息。 我还在 DLL 的所有入口点使用 AFX_MANAGE_STATE()。

我的 CFrameWnd 派生类中的构造函数代码:

创建(NULL,"MYWINDOW"); hWndFrame = this->m_hWnd;

消息映射:

LRESULT CMyDerivedWnd::OnMsgApi( WPARAM wParam, LPARAM lParam )

 OutputDebugString("OnMsgApi");
 return (LRESULT)0;

调用 StartMessaging 的我的 Main 类: 在构造函数中,我实例化了 CFrameWnd 对象:

myDerivedWnd = new CMyDerivedWnd(this);

然后调用 InitiateMessaging:

void CMain::InitiateMessaging()
 
  TCHAR szBuf[80];
  ::GetWindowText(myDerivedWnd->m_hWnd,szBuf,80);
  OutputDebugString((LPSTR)(LPCTSTR)szBuf); //This displays MYWINDOW
  StartMessaging(myDerivedWnd->m_hWnd,WM_MESSAGE_API);
 

我的 GetWindowText 函数返回正确的窗口名称,但我无法在此类中捕获 WM_MESSAGE_API 消息。 我也尝试过使用扩展 DLL,但结果相同。

【问题讨论】:

我有一个基于 MFC 对话框的示例应用程序,它使用相同的 API。 我忘了提到这个常规 DLL 是从 .NET 客户端调用的。 【参考方案1】:

我找到了问题,还没有找到答案。它是 C# 端的线程,导致事件不显示。如果对 C++ Interop 的调用在主线程上,则事件有效,但我需要在单独的线程上调用。我打算发布另一个问题以找到答案。

【讨论】:

以上是关于.NET 客户端 - MFC 常规 DLL 和用户定义的消息的主要内容,如果未能解决你的问题,请参考以下文章