我有一个加载 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/