3

既存の機能しているCOMイベントシンクの実装をリファクタリングしようとしています。イベントシンククラスはC++で記述されており、非推奨CComModuleのクラスを使用するDLLに存在します。リファクタリングの目的はCComModule、新しいATL7.0クラスCAtlComModuleに置き換えることです。

既存の実装は、.cppファイルのどこかにグローバル変数を宣言します。

CComModule _Module;

ご覧のとおり、変数には通常の「魔法の」名前が付いてい_Moduleます。ただし、通常の初期化はありませんが、DLLプロジェクトにはへの呼び出しがCComModule::Init()なく、COMオブジェクトマップもありません。イベントシンクは引き続き機能し、そのイベントハンドラメソッドは適切に呼び出されます。

CComModuleからへの移行方法に関するドキュメントがないCAtlComModuleため、変数宣言を次のように素朴に変更しようとしました。

CAtlComModule _Module;

ただし、うまくいきませんでした。変更後、イベントシンクが機能しなくなりました。つまり、イベントハンドラーメソッドが呼び出されなくなりました。

移行するために実行することになっている手順を知っている人はいますCAtlComModuleか?これまでのところ、MSDNまたはGoogleを介してソリューションを掘り下げることはできませんでしたが、適切に表示されなかった可能性があります...

ところで:必要に応じて、イベントシンクの実装について詳しく説明できますが、これまでのところ、問題はこの領域にはないと感じていました。

4

1 に答える 1

5

の最も単純な「新しいスタイル」の置換はCComModule次のようになります。

class MyModule : public CAtlDllModuleT<MyModule> {};
MyModule _Module;
于 2012-09-14T00:41:40.213 に答える