WEB开发网
开发学院操作系统windows 2008 vlc的应用之五:动态调用libvlc.dll的补充 阅读

vlc的应用之五:动态调用libvlc.dll的补充

 2009-10-24 00:00:00 来源:WEB开发网   
核心提示:最近Jeremiah在增加以前播放器的功能的时候,被一个中文路径转码问题恶心了两天,vlc的应用之五:动态调用libvlc.dll的补充,最后终于让我给解决了,在这跟大家分享这个转码的解决方法,以及用视频本次存储的接口实现,在看本篇日志之前

最近Jeremiah在增加以前播放器的功能的时候,被一个中文路径转码问题恶心了两天,最后终于让我给解决了。在这跟大家分享这个转码的解决方法,以及用视频本次存储的接口实现。

在看本篇日志之前,请先看我以前写的《vlc的应用之三:动态调用vlc-0.9.4的libvlc.dll 》。

补充一:libvlc_new(...)接口的中文路径转码处理

using System;
using System.Runtime.InteropServices;
namespace MyOwnPlayer
{
        class Core
        {
                //coreHandle字段和属性    
                private CoreHandle coreHandle;
                public CoreHandle CoreHandle
                {
                        get { return coreHandle; }
                }
                //构造方法    
                public Core(string[] argv, ref ExceptionStruct ex)
                {
                        byte[][] argvbytes = new byte[argv.Length][];
                        for (int i = 0; i < argv.Length; i++)
                        {
                                argvbytes[i] = Encoding.UTF8.GetBytes(argv[i]);
                        }
                        coreHandle = libvlc_new(argv.Length, ReturnIntPtr(argvbytes, argv.Length), ref ex);
                }
                //转换函数
                private IntPtr ReturnIntPtr(byte[][] data, int length)
                {
                        IntPtr[] dataIntPtrArr = new IntPtr[length];
                        for (int i = 0; i < length; i++)
                        {
                                dataIntPtrArr[i] = Marshal.AllocHGlobal(data[i].Length * sizeof(byte));
                                Marshal.Copy(data[i], 0, dataIntPtrArr[i], data[i].Length);
                        }
                        IntPtr dataIntPtr = Marshal.AllocHGlobal(length * Marshal.SizeOf(typeof(IntPtr)));
                        Marshal.Copy(dataIntPtrArr, 0, dataIntPtr, length);
                        return dataIntPtr;
                }
                //Dll动态导入    
                [DllImport("libvlc")]
                private static extern CoreHandle libvlc_new(int argc, IntPtr argv, ref ExceptionStruct ex);
        }
}

1 2  下一页

Tags:vlc 应用 动态

编辑录入:爽爽 [复制链接] [打 印]
赞助商链接