3

我有一个加载 1.dll 和 1.dll 加载 1_1.dll 的 .exe。在 .exe 中,我创建了多个线程,我从其中一个线程中调用一个函数,该函数调用一个 1.dll 函数,该函数在其他事物之间..调用 1_1.dll 中的一个函数,但该函数未能执行此操作:

//  Initialize COM.
    HRESULT hr = CoInitializeEx(NULL, COINIT_MULTITHREADED);
    if( FAILED(hr) )
    {
        //m_iStatus = ERROR_COINITIALIZE_EX;
        return;
    }
    //  Set general COM security levels.
    hr = CoInitializeSecurity(
        NULL,
        -1,
        NULL,
        NULL,
        RPC_C_AUTHN_LEVEL_PKT_PRIVACY,
        RPC_C_IMP_LEVEL_IMPERSONATE,
        NULL,
        0,
        NULL);
    if( FAILED(hr) )
    {
        CoUninitialize();
        //m_iStatus = ERROR_COINITIALIZE_SEC;
        return;
    }

使用以下消息调用 CoInitializeSecurity 失败:

在编组或解组任何接口之前必须初始化安全性。初始化后无法更改。

谁能解释我这里发生了什么,我做错了什么,我应该如何解决这个问题?

4

1 回答 1

4

CoInitializeSecurity 函数...

...每个进程只调用一次,显式或隐式调用

DLL 可能需要调用的唯一情况CoInitializeSecurity是当它被加载到进程中时,已知该进程不会自行初始化 COM。该进程基本上是 DLL 的瘦主机。也就是说,几乎从来没有。

这是.EXE要做的任务CoInitializeSecurity

于 2013-09-14T19:04:35.433 回答