Exemple #1
0
        /// <summary>
        ///     Gets an exported function
        /// </summary>
        public static TDelegate GetExportedFunction <TDelegate>(string dllName, string fn) where TDelegate : Delegate
        {
            var hModule = Kernel32.GetModuleHandle(dllName);
            var hFn     = Kernel32.GetProcAddress(hModule, fn);

            return(DelegateCreator.CreateDelegate <TDelegate>(hFn));
        }
Exemple #2
0
        /// <summary>
        ///     Dynamically creates a <see cref="Delegate" />.
        /// </summary>
        /// <param name="ptr">Function pointer</param>
        /// <param name="returnType">Return type of the <see cref="Delegate" /></param>
        /// <param name="args">Delegate arguments</param>
        /// <returns>A matching <see cref="Delegate" /></returns>
        private static Delegate CreateFluidCallDelegate(Pointer <byte> ptr, Type returnType, object[] args)
        {
            var argTypes = new List <Type>();

            argTypes.AddRange(args.Select(o => o.GetType()));
            argTypes.Add(returnType);

            var type = Expression.GetDelegateType(argTypes.ToArray());

            return(DelegateCreator.CreateDelegate(ptr, type));
        }
 /// <summary>
 ///     Creates a <see cref="Delegate" /> from a function pointer.
 /// <remarks>
 /// Similar to <see cref="Marshal.GetDelegateForFunctionPointer{TDelegate}"/>
 /// </remarks>
 /// </summary>
 /// <param name="ptr">Function pointer</param>
 /// <typeparam name="TDelegate"><see cref="Delegate" /> type</typeparam>
 /// <returns>A <see cref="Delegate" /> from <paramref name="ptr" /></returns>
 public static TDelegate CreateDelegate <TDelegate>(Pointer <byte> ptr) where TDelegate : Delegate
 {
     return((TDelegate)DelegateCreator.CreateDelegate(ptr, typeof(TDelegate)));
 }