从.NET应用程序间接调用CoInitializeSecurity

时间:2011-10-03 15:41:47

标签: .net c com

我在纯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:尝试引用不存在的令牌。

1 个答案:

答案 0 :(得分:3)

这是expected behavior,因为CoInitializeSecurity并不打算从CLR中执行的代码中调用。

如果您明确需要致电CoInitializeSecurity,则需要host the CLR yourself并在此过程中启动CLR之前致电CoInitializeSecurity