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,相同的代码可以正常工作

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

这不再发生,因为您现在在没有 /clr 的情况下进行编译。因此,您必须自己调用 CoInitializeEx()。

于 2013-05-25T11:16:11.620 回答