我有一个用托管代码编写并运行成功的应用程序,但是现在我从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,相同的代码可以正常工作。
答案 0 :(得分:2)
如果启用/ clr
,相同的代码可以正常工作
不确定。正是CLR之前负责调用CoInitializeEx()。从Main()入口点的[STAThread]属性或传递给Thread :: SetApartmentState()的值(如果有)中选择单元类型。默认为MTA。
由于您现在编译没有/ clr,因此不再发生这种情况。因此,您必须自己调用CoInitializeEx()。