我嘗試重構現有的和工作 COM事件接收器實現。事件接收器類用C++編寫,並駐留在使用已棄用的CComModule
類的DLL中。重構的目標是用新的ATL 7.0類CAtlComModule取代CComModule
。如何使用CAtlComModule實現COM事件接收器?
現有方案某處聲明瞭一個全局變量的.cpp文件:
CComModule _Module;
正如你所看到的變量通常的「神奇」的名_Module
。雖然習慣上的初始化不存在,但是沒有任何對CComModule::Init()
的調用,並且DLL項目中也沒有COM對象映射。事件接收器仍然有效,其事件處理程序方法得到正確調用。
由於缺乏任何文檔,如何從CComModule
到CAtlComModule
轉型,我天真地試圖改變變量聲明如下:
CAtlComModule _Module;
它沒有工作,但:變更後的事件接收器停止工作,即其事件處理程序方法不再被調用。
有誰知道應該執行的步驟遷移到CAtlComModule
?到目前爲止,我一直無法在MSDN或Google上找到解決方案,但也許我看起來不太合適...
順便說一句:如果需要,我可以提供有關事件接收器實現的更多詳細信息,但到目前爲止我覺得問題不在這個領域。
我想說一下重的CAtlDllModuleT如果這是一個類沒有註冊的火焰,但是你的僅僅是一個事件接收器,即使在傳統意義上,它甚至不需要註冊,所以我(至少暫時)也受到阻礙。 –
WhozCraig
你爲什麼要這麼做呢?您始終可以創建一個空的新ATL項目並查看模塊如何在那裏定義。 –
@羅曼R.在此期間,我嘗試了這一點,但我對結果並不滿意。空的新ATL項目做的東西,我不想拖到我的項目。它創建一個DllMain(),使用一個派生自CAtlDllModuleT的新類,動態鏈接到ATL而不是MFC。這些都是使用CComModule不必要的東西。如果沒有人有更簡單的解決方案,我將仔細看看這些變化。 – herzbube