Ale*_*ruC 4 windows com visual-c++
我有一个加载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;
}
Run Code Online (Sandbox Code Playgroud)
它使用以下消息在对CoInitializeSecurity的调用中失败:
必须先对安全性进行初始化,然后再对任何接口进行编组或取消编组。初始化后便无法更改。
谁能解释我这里发生的事情,我做错了什么以及应该如何解决?
...在每个进程中被调用一次,无论是显式还是隐式
DLL可能需要调用的唯一情况CoInitializeSecurity是将其加载到进程中时,众所周知它不能自行初始化COM。该过程基本上是DLL的瘦主机。也就是说,几乎永远不会。
这是.EXE要做的任务CoInitializeSecurity。