发起COMSecurity时,为什么我的代码会抱怨VS2017中的编组接口而不是VS2013中的编组接口

时间:2018-09-28 15:18:40

标签: c# .net visual-studio visual-studio-2017

在我当前的项目中,我们有一个COMInterface,我们在代码的开头将其初始化。它在VS2010和VS2013上运行良好,我们没有进行任何更改。我可以从VS2013编译并运行代码,但相同的代码在VS2017中不起作用。我尝试了2种不同的机器。

给出的错误是

  

System.Runtime.InteropServices.COMException

     

HResult = 0x80010119

     

Message =必须先初始化安全性,然后再对任何接口进行编组或取消编组。初始化后便无法更改。 (来自HRESULT的异常:0x80010119)

     

Source =无法评估异常源

     

StackTrace:无法评估异常堆栈跟踪

这是应用程序中发生的第一件事 App.xaml.cs

public partial class App : Application
{
    public App()
    {
        InitVS myApp;
        myApp = new InitVS();
    }
//More code
}


public class InitVS
{
    [DllImport("Ole32.dll",
        ExactSpelling = true,
        EntryPoint = "CoInitializeSecurity",
        CallingConvention = CallingConvention.StdCall,
        SetLastError = false,
        PreserveSig = false)]

    private static extern void CoInitializeSecurity(
        IntPtr pVoid,
        int cAuthSvc,
        IntPtr asAuthSvc,
        IntPtr pReserved1,
        uint dwAuthnLevel,
        uint dwImpLevel,
        IntPtr pAuthList,
        uint dwCapabilities,
        IntPtr pReserved3);

    public InitVS()
    {
        //Error happens here
        CoInitializeSecurity(IntPtr.Zero,
            -1,
            IntPtr.Zero,
            IntPtr.Zero,
            (uint)RpcAuthnLevel.PktPrivacy,
            (uint)RpcImpLevel.Impersonate,
            IntPtr.Zero,
            (uint)EoAuthnCap.DynamicCloaking,
            IntPtr.Zero);
    }
}

让我最困惑的是,它可以在VS2013中工作(还没有尝试过VS2015)。 我们使用Visual Studio Professional 2017和Visual Studio Professional 2013。

我还没有真正找到任何相关信息。有关DLL导入ofc的信息很多,但找不到VS2017做任何奇怪的事情,或者找不到VS2013的东西。

0 个答案:

没有答案