.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 链接时,MFC 应用程序断言失败