libvlc медиаплеер в C # - PullRequest
       7

libvlc медиаплеер в C #

1 голос
/ 23 сентября 2011

Привет, парни и девушки :) хорошо, так что я запустил этот проект -> http://www.helyar.net/2009/libvlc-media-player-in-c-part-2/, и он работал отлично (он использовал .net 2.0), однако, когда я пытаюсь что-то выше 3.5, это дает -> Невозможно загрузить DLL'libvlc': указанный модуль не найден.(Исключение из HRESULT: 0x8007007E)

Есть ли какой-нибудь обходной путь, который кто-то сделал, чтобы разобраться с этим?ОГРОМНОЕ спасибо людям: D: D: D: D

Ответы [ 3 ]

6 голосов
/ 19 сентября 2012

При использовании этого примера с новыми выпусками 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);

Надеюсь, это поможет!

1 голос
/ 16 января 2014

Эта ссылка будет полезна вам и всем, кто сталкивается с проблемами с "libvlc"

http://libvlcnet.sourceforge.net/

0 голосов
/ 27 сентября 2011

Вы должны скопировать libvlc.dll в папку bin/debug.Это должен быть файл из вашей установочной папки VLC (C:\program files\videolan\vlc)

...