我希望在我的COM服务器的入口点的cpp中有一个静态的全局std :: unordered_map。
相关标题代码:
typedef unordered_map<HWND,IMyInterface*> MyMapType;
相关机构:
static MyMapType MyMap;
void MyFunction(HWND hWnd, IMyInterface* pObj){
MyMap[hWnd] = pObj;
}
HINSTANCE g_hInstModule = NULL;
BOOL WINAPI DllMain ( __in HINSTANCE hInstDLL, __in DWORD fdwReason, __in LPVOID lpvReserved )
{
if( fdwReason == DLL_PROCESS_ATTACH )
{
g_hInstModule = hInstDLL;
return true;
}
else if( fdwReason == DLL_PROCESS_DETACH )
{
return true;
}
return false;
}
MyCoClass::MyCoClass()
{
DRM_Refcount = 1;
}
HRESULT STDMETHODCALLTYPE MyCoClass::InitMyCoClass()
{
CoInitializeEx(NULL, COINIT_APARTMENTTHREADED);
//replace with make window code
MyFunction(hWnd,ISomeInterface);
return S_OK;
}
我能让它工作的唯一方法是制作一个map_type指针,并在堆上创建一个map_type实例,并用全局指针指向它。 :/
为什么?
答案 0 :(得分:0)
您需要修改DllMain以显式初始化C运行时:http://support.microsoft.com/kb/814472
搜索“修改基于COM的DLL”
带有构造函数的静态对象通常通过CRT入口点初始化,然后.exes调用程序的主函数。使用DLL,您必须自己完成工作。