Ich versuche, WTL innerhalb einer In-Prozess-COM-Server-DLL (ein IE BHO) zu verwenden, aber ich kämpfe mit _Module.Wie verwende ich WTL in einer DLL?
Meine DLL muss CMyModule
von CAtlDllModuleT<>
abgeleitet:
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();
}
Aber diese Konflikte mit den meisten WTL Beispiele, die innerhalb stdafx.h
so etwas wie dies erfordern:
extern CAppModule _Module; // WTL version of CComModule
Egal, wie ich es tun, Ich (nicht überraschend) bekomme Kompilierungsfehler. CMyModule
abgeleitet von CAppModule
Borken auf _Module.DllUnregisterServer()
usw. CMyModule
abgeleitet von CAtlDllModuleT<>
Borks auf Code wie _Module.GetMessageLoop()
.
Haben Sie gute Referenzen darüber, wie WTL in einer DLL funktionieren soll? Google findet viele Fragen mit wenigen Antworten.
Ich habe versucht, das aber gegeben habe es ein bisschen mehr von einem jetzt gehen. Bringt mich so weit, aber eins führt zum anderen. Scheint, dass mehrfaches Erben mit CAtlBaseModule mir zu wenig gibt (z. B. GetMessageLoop fehlt in _Module). Vererben mit CAppModule gibt zu viel (z. B. uneindeutigen Zugriff von DLLMain). – Mat