1

嘿伙计们和女孩们 :) 好的,所以我运行了这个项目-> 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

4

2 回答 2

6

将该示例与新的 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);

我希望这有帮助!

于 2012-09-19T00:37:48.660 回答
0

您必须复制libvlc.dll到您的bin/debug文件夹。它必须是您的 VLC 安装文件夹中的一个 ( C:\program files\videolan\vlc)

于 2011-09-27T05:46:04.517 回答