我在纯C项目中有以下代码:
void Foo()
{
HRESULT hres = CoInitializeEx(0, COINIT_MULTITHREADED);
hres = CoInitializeSecurity(
NULL,
-1, // COM authentication
NULL, // Authentication services
NULL, // Reserved
RPC_C_AUTHN_LEVEL_DEFAULT, // Default authentication
RPC_C_IMP_LEVEL_IMPERSONATE, // Default Impersonation
NULL, // Authentication info
EOAC_NONE, // Additional capabilities
NULL // Reserved
);
}
如果我将项目构建为Application(.exe)并调用此方法,一切正常。
如果我将项目构建为静态库(.lib),请在.NET应用程序中使用它并调用该方法,CoInitializeSecurity返回错误1008:尝试引用不存在的令牌。
答案 0 :(得分:3)
这是expected behavior,因为CoInitializeSecurity
并不打算从CLR中执行的代码中调用。
如果您明确需要致电CoInitializeSecurity
,则需要host the CLR yourself并在此过程中启动CLR之前致电CoInitializeSecurity
。