1

マネージ コードで記述され、正常に実行されるアプリケーションがありますが、Visual Studio 2008 から /clr オプションを無効にし、必要な変更を行ってマネージ コードを削除し、ネイティブに変換して、コードを正常にコンパイルしましたが、関数CoInitializeSecurity()は で失敗していHResult = 0x800401f0ます。CoInitialize has not been called.... 私がGetLastError()それを言うとき言うreturns 0

HRESULT hres = CoInitializeSecurity(
                                NULL,
                                -1,
                                NULL,
                                NULL,
                                RPC_C_AUTHN_LEVEL_DEFAULT,
                                RPC_C_IMP_LEVEL_IMPERSONATE,
                                NULL,
                                EOAC_NONE,
                                NULL
                                );
if (FAILED(hres))
{
    MessageBox(NULL, "COM Init failed...", "Stop", MB_OK);
    return FALSE;
}

前もって感謝します、、

/clr が有効になっている場合、同じコードが正常に機能します。

4

1 に答える 1

2

/clr が有効な場合、同じコードは正常に機能します

もちろん。以前に CoInitializeEx() の呼び出しを処理したのは CLR でした。Main() エントリポイントの [STAThread] 属性、または Thread::SetApartmentState() に渡した値 (存在する場合) からアパートメント タイプを選択します。デフォルトは MTA です。

/clr なしでコンパイルするようになったので、このようなことはなくなりました。したがって、自分で CoInitializeEx() を呼び出す必要があります。

于 2013-05-25T11:16:11.620 に答える