2010-12-02 77 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的調用位於主線程上,則事件可以工作,但我需要將該調用放在單獨的線程中。我打算髮布另一個問題來尋找答案。

相關問題