2

CoCreateInstance() を呼び出す必要がある DLL があります。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 オプションも使用してみましたが、役に立ちませんでした。フィードバックやアイデアは大歓迎です。

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 に答える