В моем текущем проекте у нас есть COMInterface, который мы инициализируем в начале кода.Он хорошо работал в VS2010 и VS2013, и мы не внесли никаких изменений.Я могу скомпилировать и запустить код из VS2013, но тот же код не работает в VS2017.Я пробовал 2 разные машины.
Ошибка:
System.Runtime.InteropServices.COMException
HResult = 0x80010119
Сообщение =Безопасность должна быть инициализирована до того, как любые интерфейсы будут маршалированы или демаршаллированы.Его нельзя изменить после инициализации.(Исключение из 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 из c, но не могу найти ничего, что VS2017 делает что-то странное, или VS2013 для этого материала.