.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 和用户定义的消息的主要内容,如果未能解决你的问题,请参考以下文章

使用带有共享 mfc dll 的常规 dll

与使用 MFC 的常规 DLL 链接时,MFC 应用程序断言失败

MFC dll

MFC dll

如果我从常规 DLL 加载 MFC DLL,反序列化将停止工作

如何在 MFC 常规 DLL 中创建和使用 CFormView? (视觉工作室 2008)