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

时间:2010-12-02 23:52:00

标签: .net dll mfc messaging

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

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

StartMessaging(<WindowHandle>,WM_MESSAGE_API);

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

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

创建(NULL, “mywindow的”);  hWndFrame = this-&gt; m_hWnd;

消息地图:

LRESULT CMyDerivedWnd::OnMsgApi( WPARAM wParam, LPARAM lParam )
{
 OutputDebugString("OnMsgApi");
 return (LRESULT)0;
}

调用StartMessaging的My 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函数返回正确的Window名称,但我无法在此类中捕获WM_MESSAGE_API消息。 我也尝试过使用扩展DLL但结果相同。

1 个答案:

答案 0 :(得分:0)

我发现了问题,而不是答案。它是在C#端进行线程处理导致事件无法显示。如果对C ++ Interop的调用是在主线程上,则事件有效,但我需要将调用放在一个单独的线程上。我打算发布另一个问题来寻找答案。