windows - CoInitializeSecurity 错误

标签 windows visual-c++ com

我有一个加载 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 时失败并带有此消息:

必须在编码或解码任何接口(interface)之前初始化安全性。一旦初始化就无法更改。

任何人都可以向我解释这里发生了什么,我做错了什么以及我应该如何解决这个问题?

最佳答案

CoInitializeSecurity function ...

... is called exactly once per process, either explicitly or implicitly

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

.EXE 的任务是执行CoInitializeSecurity

关于windows - CoInitializeSecurity 错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18805192/

相关文章:

c# - Windows 注册表中的 ProductName,是否针对不同语言进行了本地化?

c++ - Hook MS Detours 并注入(inject) Withdll.exe 时应用程序崩溃

c++ - Qt Creator LNK1104 : cannot open file 'glu32.lib'

.net - 如何在Silverlight中调用COM打印组件

windows - 又一个 bash(现在为 .bat)脚本

python - 如何安全地写入文件?

c++ - vc++ 64 位 dll 参数大小不正确

c++ - 消除 MS Visual C++ 链接器警告 : "warning LNK4221"? 的最佳方法是什么

c++ - QAxObject 没有为 COM 对象创建槽信号

c++ - QueryInterface() 成功时可以为我们提供 nullptr 吗?