1.dll をロードする .exe があり、1.dll が 1_1.dll をロードします。.exe で複数のスレッドを作成します。そのうちの 1 つから、他のものとの間で 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 を呼び出すと失敗します。
インターフェイスをマーシャリングまたはアンマーシャリングする前に、セキュリティを初期化する必要があります。一度初期化すると変更できません。
ここで何が起こっているのか、何が間違っているのか、どうすれば修正できるのか、誰か説明してもらえますか?