c++ - 全局 std::unordered_map com 服务器初始化问题

标签 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 实例并用全局指针指向它。 :/

为什么?

最佳答案

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

搜索“修改基于 COM 的 DLL”

具有构造函数的静态对象通常通过 CRT 入口点进行初始化,对于 .exes 然后调用程序的主函数。对于 DLL,您必须自己动手。

关于c++ - 全局 std::unordered_map com 服务器初始化问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2982387/

相关文章:

c++ - 如何在 Qt Widget 中重新定义 Z-Order

c++ - Qt框架使用ffmpeg库报错

c++ - 不寻常的变量声明

c++ - 在 vs2005 中通过 COM 引用 .net 4 库

c# - 如何从 C# 读取非托管代码的 TLB(类型库)?

com - LuaCOM Word 文档标题

com - 如何在AutoIt中提前绑定(bind)COM对象?

c++ - 从映射中删除动态分配的内存

c++ - 操纵器的运算符重载

windows - 我是否需要编码 CreateStreamOnHGlobal 返回的 IStream,以便跨线程使用?