Ejemplo n.º 1
0
        public static IntPtr libvlc_new(string[] parameters, ref libvlc_exception_t exception)
        {
            if (parameters.Length > 10)
            {
                throw new ArgumentException("Too many items in array, maximum 10 allowed", "parameters");
            }
            //
            PointerToArrayOfPointerHelper argv = new PointerToArrayOfPointerHelper();

            argv.pointers = new IntPtr[11];
            //
            Assembly assembly = Assembly.GetEntryAssembly();

            if (assembly != null)
            {
                argv.pointers[0] = Marshal.StringToHGlobalAnsi(assembly.Location);
            }
            else
            {
                assembly         = Assembly.GetExecutingAssembly();
                argv.pointers[0] = Marshal.StringToHGlobalAnsi(assembly.Location);
            }

            for (int i = 0; i < parameters.Length; i++)
            {
                argv.pointers[i + 1] = Marshal.StringToHGlobalAnsi(parameters[i]);
            }

            IntPtr argvPtr = IntPtr.Zero;

            try {
                int size = Marshal.SizeOf(typeof(PointerToArrayOfPointerHelper));
                argvPtr = Marshal.AllocHGlobal(size);
                Marshal.StructureToPtr(argv, argvPtr, false);

                return(libvlc_new(parameters.Length + 1, argvPtr, ref exception));
            } finally {
                for (int i = 0; i < parameters.Length + 1; i++)
                {
                    if (argv.pointers[i] != IntPtr.Zero)
                    {
                        Marshal.FreeHGlobal(argv.pointers[i]);
                    }
                }
                if (argvPtr != IntPtr.Zero)
                {
                    Marshal.FreeHGlobal(argvPtr);
                }
            }
        }
Ejemplo n.º 2
0
        public static IntPtr libvlc_new(string[] parameters, ref libvlc_exception_t exception) {
            if (parameters.Length > 10) {
                throw new ArgumentException("Too many items in array, maximum 10 allowed", "parameters");
            }
            //
            PointerToArrayOfPointerHelper argv = new PointerToArrayOfPointerHelper();
            argv.pointers = new IntPtr[11];
            //
            Assembly assembly = Assembly.GetEntryAssembly();
            if (assembly != null) {
                argv.pointers[0] = Marshal.StringToHGlobalAnsi(assembly.Location);
            } else {
                assembly = Assembly.GetExecutingAssembly();
                argv.pointers[0] = Marshal.StringToHGlobalAnsi(assembly.Location);
            }

            for (int i = 0; i < parameters.Length; i++) {
                argv.pointers[i + 1] = Marshal.StringToHGlobalAnsi(parameters[i]);
            }

            IntPtr argvPtr = IntPtr.Zero;
            try {
                int size = Marshal.SizeOf(typeof (PointerToArrayOfPointerHelper));
                argvPtr = Marshal.AllocHGlobal(size);
                Marshal.StructureToPtr(argv, argvPtr, false);

                return libvlc_new(parameters.Length + 1, argvPtr, ref exception);
            } finally {
                for (int i = 0; i < parameters.Length + 1; i++) {
                    if (argv.pointers[i] != IntPtr.Zero) {
                        Marshal.FreeHGlobal(argv.pointers[i]);
                    }
                }
                if (argvPtr != IntPtr.Zero) {
                    Marshal.FreeHGlobal(argvPtr);
                }
            }
        }