禁用clr选项时CoInitializeSecurity失败

时间:2013-05-25 10:57:01

标签: c++ com clr managed

我有一个用托管代码编写并运行成功的应用程序,但是现在我从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,相同的代码可以正常工作。

1 个答案:

答案 0 :(得分:2)

  

如果启用/ clr

,相同的代码可以正常工作

不确定。正是CLR之前负责调用CoInitializeEx()。从Main()入口点的[STAThread]属性或传递给Thread :: SetApartmentState()的值(如果有)中选择单元类型。默认为MTA。

由于您现在编译没有/ clr,因此不再发生这种情况。因此,您必须自己调用CoInitializeEx()。