CoCreateInstance() 永远不会返回

CoCreateInstance() never returns

本文关键字:返回 永远 CoCreateInstance      更新时间:2023-10-16

我有一个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() 挂起并且永远不会返回。我也尝试使用多线程选项,但无济于事。任何反馈或想法不胜感激。

另外,从马的嘴里: http://support.microsoft.com/kb/305723

从这个问题

您不应该执行任何 API 调用,尤其是对于诸如 从 DLLMain 创建线程或窗口。