У меня есть проект, который использует WTL в DLL. Я посмотрел, как настроены мои заголовки, и похоже, что я взломал эту проблему ...
Мой модуль настроен так, как ваш пример кода, наследуемый от CAtlDllModuleT <>, за исключением того, что имя глобальной переменной модуля - _AtlModule, а не _Module Например:
class CMyModule : public CAtlDllModuleT< CMyModule >
{
public:
DECLARE_LIBID(LIBID_MyLib)
DECLARE_REGISTRY_APPID_RESOURCEID(IDR_MYPROJ, "{...}")
};
CMyModule _AtlModule;
Итак, все точки входа DllMain.cpp используют _AtlModule. Тогда в файле stdafx.h это выглядит так:
// WTL includes
#define _Module (*_pModule)
#include <atlapp.h>
#include <atlctrls.h>
#include <atldlgs.h>
#undef _Module
Эта вещь _pModule определена в atlbase.h как:
__declspec(selectany) CComModule* _pModule = NULL;
Должен быть лучший способ, но это работает.