2012-10-12 159 views
2

我有一个需要调用CoCreateInstance()的DLL。在Dllmain()中,我创建了一个新线程来运行我的函数do_stuff()。 CoCreateInstance()在do_stuff()中被调用,如下所示。CoCreateInstance()永远不会返回

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选项,但无济于事。任何反馈或想法表示赞赏。

回答

1

this question

你不应该做任何的API调用,特别是对于像 创建线程或窗口,从的DLLMain。

相关问题