gpt4 book ai didi

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

转载 作者:塔克拉玛干 更新时间:2023-11-03 08:02:15 27 4
gpt4 key购买 nike

我想在我的 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/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com