C#中的libvlc媒体播放器

Dav*_*vid 1 .net c# media-player libvlc

嘿男人和女孩:)好吧所以我运行这个项目 - > http://www.helyar.net/2009/libvlc-media-player-in-c-part-2/并且它工作得很好(他使用.net 2.0)然而,当我尝试任何高于3.5的任何东西时,它给出了 - >无法加载DLL'libvlc':找不到指定的模块.(来自HRESULT的异常:0x8007007E)

是否有任何解决方法有人已经做了这个排序?非常感谢ppl:D:D:D:D

use*_*821 6

将该示例与新的2.0.x VLC版本一起使用时,必须完成两件事.首先,您必须以某种方式将libvlc DLL添加到搜索路径.我使用SetDllDirectory调用来完成这个技巧.你声明它:

static class LibVlc
{
    . . .
    [DllImport("kernel32.dll", SetLastError = true)]
    public static extern bool SetDllDirectory(string lpPathName);
    . . .
}
Run Code Online (Sandbox Code Playgroud)

然后,您可以使用VLC安装的根文件夹调用此方法.在我的电脑上,我把它称为如下:

LibVlc.SetDllDirectory(@"C:\Program Files (x86)\VideoLAN\VLC");
Run Code Online (Sandbox Code Playgroud)

显然,对于正在分发的程序,该参数应该是可配置的.

接下来,VLC API显然已经改变,因为没有一种方法需要再传递异常对象.看起来应检查方法的返回值(例如,如果出现错误,libvlc_new()将返回NULL).我没有尝试像他一样通过引用传递异常对象但是没有它就调用所有工作都很好(我的接口现在完全匹配VLC API).我还指定了在进行互操作时使用的调用约定,只是为了向运行时清楚我对参数传递顺序的期望等等.例如,以下是我对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);
Run Code Online (Sandbox Code Playgroud)

我希望这有帮助!