Почему мой код жалуется на маршаллированный интерфейс в VS2017, но не в VS2013 при запуске COMSecurity - PullRequest
0 голосов
/ 28 сентября 2018

В моем текущем проекте у нас есть 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 для этого материала.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...