2

我有一个 DLL,我需要在其中调用 CoCreateInstance()。在 Dllmain() 中,我创建了一个新线程来运行我的函数 do_stuff()。在 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 选项,但无济于事。任何反馈或想法表示赞赏。

4

2 回答 2

2

另外,从马口中:http: //support.microsoft.com/kb/305723

于 2012-10-12T07:14:15.903 回答
1

这个问题

您不应该从 DLLMain 执行任何 API 调用,尤其是对于创建线程或窗口之类的事情。

于 2012-10-12T07:09:13.710 回答