嘿伙计们和女孩们 :) 好的,所以我运行了这个项目-> 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
嘿伙计们和女孩们 :) 好的,所以我运行了这个项目-> 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
将该示例与新的 2.0.x VLC 版本一起使用时,必须完成两件事。首先,您必须以某种方式将 libvlc DLL 添加到搜索路径。我使用了对 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");
显然,对于分发的程序,该参数应该是可配置的。
接下来,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);
我希望这有帮助!
您必须复制libvlc.dll
到您的bin/debug
文件夹。它必须是您的 VLC 安装文件夹中的一个 ( C:\program files\videolan\vlc
)