我有一个DLL,我需要在其中调用CoCreateInstance()。在Dllmain()中,我创建了一个新线程来运行我的函数do_stuff()。 CoCreateInstance()在do_stuff()中调用,如下所示。
BOOL WINAPI DllMain(HMODULE hModule, DWORD fdwReason, LPVOID lpvReserved) {
...
switch(fdwReason) {
case DLL_PROCESS_ATTACH:
CreateThread(NULL, 0, (LPTHREAD_START_ROUTINE)do_stuff, NULL, 0, NULL);
...
break;
...
}
...
return TRUE;
}
DWORD WINAPI do_stuff(void) {
...
HRESULT hr = CoInitializeEx(NULL, COINIT_APARTMENTTHREADED);
if (SUCCEEDED(hr)) {
hr = CoCreateInstance(rclsid, NULL, CLSCTX_LOCAL_SERVER, riid, ppv);
...
但是,CoCreateInstance()挂起并且永不返回。我也试过使用MULTITHREADED选项,但无济于事。任何反馈或想法都表示赞赏。
答案 0 :(得分:2)
答案 1 :(得分:1)
您不应该进行任何API调用,特别是对于类似的事情 从DLLMain创建线程或窗口。