gpt4 book ai didi

c# - C# 中的 libvlc 媒体播放器

转载 作者:太空宇宙 更新时间:2023-11-03 18:42:23 27 4
gpt4 key购买 nike

嘿伙计们和女孩们 :) 好的,所以我运行了这个项目 -> 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)。我没有像他那样尝试通过引用传递异常对象,但是没有它调用都可以正常工作(我的接口(interface)现在与 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);

希望对您有所帮助!

关于c# - C# 中的 libvlc 媒体播放器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7526518/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com