Winforms Windows窗体OpenFileDialog和LibVLC插件dll入口点错误

Winforms Windows窗体OpenFileDialog和LibVLC插件dll入口点错误,winforms,dll,openfiledialog,libvlc,entry-point,Winforms,Dll,Openfiledialog,Libvlc,Entry Point,我正在使用libvlc库。播放视频文件时效果很好,这是我在openFileDialog中选择的。但我的目标是从网络摄像头中播放视频并预览 我让libvlc在屏幕上显示网络摄像头视频,但当我注释掉openFileDialog.show()行(我不再需要该行)时,每个libvlc插件(基本上是一个.dll文件)的“在库中找不到入口点”错误对话框开始弹出 我看不到OpenFileDialog和libvlc插件之间的任何关系 什么会导致这样的问题 编辑: 跳过所有错误对话框后,程序继续工作。当我使用VL

我正在使用libvlc库。播放视频文件时效果很好,这是我在openFileDialog中选择的。但我的目标是从网络摄像头中播放视频并预览

我让libvlc在屏幕上显示网络摄像头视频,但当我注释掉openFileDialog.show()行(我不再需要该行)时,每个libvlc插件(基本上是一个.dll文件)的“在库中找不到入口点”错误对话框开始弹出

我看不到OpenFileDialog和libvlc插件之间的任何关系

什么会导致这样的问题

编辑:


跳过所有错误对话框后,程序继续工作。

当我使用VLC player时,它在“plugin”文件夹中复制了插件。在我的应用程序中,我使用了这些插件,并且出现了错误。在我下载并解包了播放器的新实例之后,我发现没有插件的副本,所以我得出结论,当你第一次启动它时,播放器会复制插件(没有测试它)。
当我用新的插件文件夹替换插件文件夹时,所有错误都消失了。

我的水晶球说,您间接依赖OpenFileDialog更改Environment.CurrentDirectory。您必须将libvlc使用的所有插件dll复制到与EXE相同的目录中。@HansPassant libvlc.dll、libvlccore.dll和plugins文件夹与my.EXE位于同一目录中。我复制了vlc播放器文件夹中的所有内容。libvlc实际上可以工作(它在屏幕上渲染摄像机的视频),但我必须先跳过所有这些错误。
private void btPlay_Click(object sender, EventArgs e)
    {
        /*
        if (openFileDialog1.ShowDialog() != System.Windows.Forms.DialogResult.OK)
            return;
         * */

        CleanUp();

        string pluginPath = Path.Combine(Path.GetDirectoryName(Assembly.GetEntryAssembly().Location), "plugins");

        string[] args = new string[]{
            "--no-qt-error-dialogs",
            "--ignore-config",
            "--quiet",
            "--plugin-path=" + pluginPath
        };

        //LibVlc initialization, that is where ERORR OCCURES
        vlcInst = new VlcInstance(args);

        /*  Input media settings    */

        //VlcMedia media = new VlcMedia(vlcInst, openFileDialog1.FileName);
        VlcMedia media = new VlcMedia(vlcInst, "dshow://");

        LibVlc.libvlc_media_add_option(media.handle, "dshow-vdev=USB2.0 UVC VGA WebCam");
        LibVlc.libvlc_media_add_option(media.handle, "dshow-adev=none");

        /*  Output media settings    */

        string[] outputOptions = new string[] {
            "sout=#duplicate{",
                "dst=",
                    "display",
                ",",
                "dst=",
                    "'",
                        "transcode{vcodec=h264,acodec=mpga,ab=128,channels=2,samplerate=44100}",
                        ":http{mux=ffmpeg{mux=flv},dst=:666/}",
                    "'",
            "}"
        };

        LibVlc.libvlc_media_add_option(media.handle, String.Concat(outputOptions));

        streamer = new VlcStreamer(media);

        media.Dispose();

        streamer.Drawable = mediaPanel.Handle;

        streamer.Play();
    }

    private void CleanUp()
    {
        if (streamer != null)
        {
            streamer.Stop();
            streamer.Dispose();
        }
    }