При использовании этого примера с новыми выпусками VLC 2.0.x необходимо сделать две вещи.Во-первых, вы должны как-то добавить DLL libvlc в путь поиска.Я использовал вызов SetDllDirectory, чтобы сделать трюк.Вы объявляете это как:
static class LibVlc
{
. . .
[DllImport("kernel32.dll", SetLastError = true)]
public static extern bool SetDllDirectory(string lpPathName);
. . .
}
Затем вы можете вызвать этот метод с корневой папкой установки VLC.На моем ПК я назвал это следующим образом:
LibVlc.SetDllDirectory(@"C:\Program Files (x86)\VideoLAN\VLC");
Очевидно, что для распространяемой программы этот параметр должен быть настраиваемым.
Далее, API VLC, очевидно, не изменились, потому что ни один изметоды требуют, чтобы объект исключения больше передавался.Похоже, что возвращаемые значения из методов должны быть проверены (например, libvlc_new () возвращает NULL, если произошла ошибка).Я не пробовал передавать объект исключения по ссылке, как он, но все вызовы без него работают нормально (и мои интерфейсы теперь точно соответствуют API VLC).Я также указываю соглашение о вызовах, которое следует использовать при взаимодействии, просто чтобы во время выполнения было ясно, что я ожидаю от порядка передачи параметров и тому подобного.Например, вот мои определения для libvlc_new и libvlc_release:
[DllImport("libvlc", CallingConvention=CallingConvention.Cdecl)]
public static extern IntPtr libvlc_new(int argc,
[MarshalAs(UnmanagedType.LPArray,
ArraySubType = UnmanagedType.LPStr)] string[] argv);
[DllImport("libvlc", CallingConvention=CallingConvention.Cdecl)]
public static extern void libvlc_release(IntPtr instance);
Надеюсь, это поможет!