インプロセスCOMサーバーDLL(IE BHO)内でWTLを使用しようとしていますが、_Moduleで苦労しています。DLLでWTLを使用するにはどうすればよいですか?
私のDLLがCAtlDllModuleT<>
由来CMyModule
を必要とします:
class CMyModule : public CAtlDllModuleT<CMyModule>
{
public:
DECLARE_LIBID(LIBID_MyLib)
DECLARE_REGISTRY_APPID_RESOURCEID(IDR_MYPROJ, "{...}")
};
CMyModule _Module;
extern "C" BOOL WINAPI DllMain(...)
{
hInstance;
return _Module.DllMain(dwReason, lpReserved);
}
...
STDAPI DllUnregisterServer(void)
{
return _Module.DllUnregisterServer();
}
しかしstdafx.h
以内にこのような何かを必要とするほとんどのWTL例、この紛争:
extern CAppModule _Module; // WTL version of CComModule
私はそれを行う方法に関係なく、私は(意外にも)コンパイルエラーを起こす。 CMyModule
CAppModule
borks on _Module.DllUnregisterServer()
などCMyModule
CAtlDllModuleT<>
borks onコード_Module.GetMessageLoop()
などに由来します。
DLL内でWTLがどのように動作するはずです。 Googleは、いくつかの答えで多くの質問を見つけます。
私はそれを試したと思いますが、今行くのはもう少しそれを与えています。今まで私を取得しますが、1つは別のものにつながります。 CAtlBaseModuleを継承している複数のインスタンスが私に与える影響が少なすぎると思われます(例:_ModuleにGetMessageLoopがありません)。 CAppModuleで継承すると、あまりにも多くの問題が発生します(DLLMainのあいまいなアクセスなど)。 – Mat