2010-12-02 101 views
0

更新:这是一个.NET客户端调用常规DLL。我还得到了另一个扩展DLL,它导出一些类并在常规DLL中使用。.NET客户端 - MFC规则DLL和用户定义的消息

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

StartMessaging(<WindowHandle>,WM_MESSAGE_API); 

我需要经常MFC规则DLL,这将只用于接收邮件创建一个隐藏的CFrameWnd窗口。 我也在使用AFX_MANAGE_STATE()的DLL的所有入口点。

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

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

消息映射:

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

我的主类,其中StartMessaging叫做: 在构造我实例化的CFrameWnd对象:

myDerivedWnd =新CMyDerivedWnd(本);

,然后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,但结果相同。

+0

我有一个示例MFC对话框的应用程序,它使用相同的API。 – cloudnine 2010-12-03 00:00:25

回答

0

我发现问题,而不是答案。它在C#端进行线程化,导致事件不显示。如果对C++ Interop的调用位于主线程上,则事件可以工作,但我需要将该调用放在单独的线程中。我打算发布另一个问题来寻找答案。