在我当前的项目中,我们有一个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的东西。