global std :: unordered_map com server init问题

时间:2010-06-05 22:37:23

标签: c++ com

我希望在我的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实例,并用全局指针指向它。 :/

为什么?

1 个答案:

答案 0 :(得分:0)

您需要修改DllMain以显式初始化C运行时:http://support.microsoft.com/kb/814472

搜索“修改基于COM的DLL”

带有构造函数的静态对象通常通过CRT入口点初始化,然后.exes调用程序的主函数。使用DLL,您必须自己完成工作。