C# 使用VLC编写的播放器,使用libvlc_video_set_callbacks进入回调后报错

参考http://www.cnblogs.com/smartsensor/p/4343769.html 中的回调功能,想将视频的每一帧图片截取下来,代码如下
private const int _width = 1920;
private const int _height = 1080;
private const int _pixelBytes = 4;
private const int _pitch = _width * _pixelBytes;
private IntPtr _buff = IntPtr.Zero;

    private VideoLockCB _videoLockCB;
    private VideoUnlockCB _videoUnlockCB;
    private VideoDisplayCB _videoDisplayCB;
    private void button3_Click(object sender, EventArgs e)
    {

        if (_videoLockCB == null)
            _videoLockCB = new VideoLockCB(VideoLockCallBack);
        if (_videoUnlockCB == null)
            _videoUnlockCB = new VideoUnlockCB(VideoUnlockCallBack);
        if (_videoDisplayCB == null)
            _videoDisplayCB = new VideoDisplayCB(VideoDiplayCallBack);


        string pluginPath = System.Environment.CurrentDirectory + "\\plugins\\";
        string plugin_arg = "--plugin-path=" + pluginPath;
        string[] arguments = { "-I", "dummy", "--ignore-config", "--no-video-title", plugin_arg };
        IntPtr vlcInstance = libvlc_new(arguments);//




        IntPtr mediaInstance = libvlc_media_new_path(vlcInstance, "C:\\Users\\Administrator\\Videos\\Vive Cinema\\test.mp4");
        IntPtr mediaPlayerInstance = libvlc_media_player_new_from_media(mediaInstance);

// IntPtr render_wnd = this.panel1.Handle;//
// libvlc_media_player_set_hwnd(mediaPlayerInstance, (Int64)render_wnd);

        libvlc_media_release(mediaInstance);

        libvlc_video_set_format(mediaPlayerInstance, "RV32", _width, _height, _pitch);//RGBA 颜色不对,YUYV显示错误,I420程序跳出
        libvlc_video_set_callbacks(mediaPlayerInstance, _videoLockCB, _videoUnlockCB, _videoDisplayCB, IntPtr.Zero);

        libvlc_media_player_play(mediaPlayerInstance);

        /*Thread.Sleep(200);
        int length = libvlc_media_player_get_length(mediaPlayerInstance);
        int width = libvlc_video_get_width(mediaPlayerInstance);
        int height = libvlc_video_get_height(mediaPlayerInstance);

        Console.WriteLine("" + length + "," + width + "," + height);
         * */
    }

    [DllImport("libvlc.dll", EntryPoint = "libvlc_media_player_new_from_media", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)]
    public static extern IntPtr libvlc_media_player_new_from_media(IntPtr mediaInstance);
    [DllImport("libvlc.dll", EntryPoint = "libvlc_video_set_callbacks", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)]
    public static extern void libvlc_video_set_callbacks(IntPtr mediaPlayInstance, VideoLockCB lockCB, VideoUnlockCB unlockCB, VideoDisplayCB displayCB, IntPtr opaque);
    [DllImport("libvlc.dll", EntryPoint = "libvlc_video_set_format", CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)]
    public static extern void libvlc_video_set_format(IntPtr mediaPlayerInstance, IntPtr chroma, UInt32 width, UInt32 height, UInt32 pitch);
    public delegate IntPtr VideoLockCB(IntPtr opaque, IntPtr planes);
    //解锁一个图片缓冲区
    public delegate void VideoUnlockCB(IntPtr opaque, IntPtr picture, IntPtr planes);
    //显示图片
    public delegate void VideoDisplayCB(IntPtr opaque, IntPtr picture);
    // 锁定一个图片缓冲区时先锁定,然后初始化这个缓冲区。
    private IntPtr VideoLockCallBack(IntPtr opaque, IntPtr planes)
    {
        Lock();
        _buff = Marshal.AllocHGlobal(_pitch * _height);
        Marshal.WriteIntPtr(planes, _buff);//初始化
        return IntPtr.Zero;
    }

   private void VideoDiplayCallBack(IntPtr opaque, IntPtr picture)
    {

    }

    //解锁图片缓冲区
    private void VideoUnlockCallBack(IntPtr opaque, IntPtr picture, IntPtr planes)
    {
        Marshal.FreeHGlobal(_buff);//释放缓冲区
        Unlock();
    }


    bool obj = false;
    private void Lock()
    {
        obj = true;
    }
    private void Unlock()
    {
        obj = false;
    }
    private bool Islock()
    {
        return obj;
    }

运行的时候,点击按钮后,会在VideoLockCallBack返回后报错,直接就不能运行了,帮忙看一下是什么原因,VLC版本位2.2.4

http://zhidao.baidu.com/link?url=v1xgYoKNVOC2U1Yp4S8fEQTG5y3lFVR4LZaiUwrSzoptXgWjRzObBHSFmmmBxsQRIcQzjvegUXUYNcG8PuNI9z4S02qp4WaE4Gl98Lw0tkK

String转IntPtr

VideoDiplayCallBack函数的内容没写 , 你在看看原文 里面有。