2011-05-16 107 views
4

首先:這甚至可能嗎?捕獲MFC應用程序以純C++生成的windows消息

我有一個第三方的DLL接口的一些硬件。它是用MFC編寫的。我收到了(來自dll供應商)示例Visual Studio 2010解決方案,該解決方案只有一個項目:一個MFC應用程序(.exe),它調用有問題的第三方dll。它工作正常。

當我嘗試從我的dll(這是純C++,沒有MFC,沒有.NET)使用第三方dll時,我可以調用它的函數,但有一個問題:示例MFC應用程序似乎「重寫「MessageProc爲了捕獲第三方dll生成的某些消息。雖然DLL有一個名爲「RegisterFuncCallback」的函數,我使用它,但我的回調永遠不會被調用。

所以這裏的問題是:如何在不創建MFC應用程序的情況下捕獲這些消息? (它甚至有可能嗎?)

回答

4

好的,我做到了。具體方法如下:

  1. 創建它從CWnd
  2. 繼承的類聲明一個消息映射關聯所需的信息及其處理程序
  3. 當創建的窗口,使用CreateEx函數(我做到了我的類的構造函數),並在最後一個參數中傳遞HWND_MESSAGE標誌。這將創建窗口作爲「消息窗口」,即不可見。
  4. 一旦我完成初始化窗口和MFC DLL,我在隱藏的窗口上調用RunModalLoop,在一個單獨的線程中,因爲它是阻塞的。這啓動了消息泵,並開始接收MFC dll的消息。

編輯:我終於可以用Win32 API來完成了。這裏是我的故事,代碼包括: Programate Algo Blog。別擔心,它是英文的。

+0

我剛剛意識到CWnd是一個MFC類,所以我沒有完成它。但是我對這個解決方案很滿意 – 2011-05-24 15:30:32

+0

一位同事告訴我,我在CWnd上做的事很容易處理WinAPI/Win32調用,所以現在我正在研究這個問題。完成後,我會在此發表博文,並在此發佈鏈接 – 2011-05-24 16:25:22

3

如果DLL與Win32消息一起使用,您不會繞過它們。但是你並不需要MFC,一個簡單的WinAPI解決方案就足夠了。 MFC只是包裝Win32 API。如果這些消息不是Win32消息,則不需要Win32應用程序。

+0

聽起來好多了,Win32應該更容易封裝。我該怎麼做?我試圖用SetWindowsHookEx函數,但我的回調仍然沒有得到所謂... – 2011-05-16 19:55:37

+0

我做了這樣的事:'::和SetWindowsHookEx(WH_GETMESSAGE , myCallBack函數, 的GetModuleHandle( 「MYDLL.DLL」), GetCurrentThreadId( ) );' – 2011-05-16 19:58:57

+0

只要我不知道這個DLL是如何工作的,我不能回答這個問題。而且我也不是一個Win32專家(我從來沒有使用過上述方法,也沒有從另一個DLL中傳遞消息)。我只想說,你不需要用於Win32特定任務的MFC,因爲它僅僅是一個包裝。 – 2011-05-16 20:05:46

相關問題