Use DefinePInvokeMethod method to create a PInvoke method. : Method « Reflection « C# / CSharp Tutorial






using System;
using System.Text;
using System.Reflection;
using System.Reflection.Emit;
using System.Runtime.InteropServices;

public class Example
{
    public static void Main()
    {
        AssemblyName asmName = new AssemblyName("MyTest");           
        AssemblyBuilder dynamicAsm = AppDomain.CurrentDomain.DefineDynamicAssembly(asmName,AssemblyBuilderAccess.RunAndSave);

        ModuleBuilder dynamicMod = dynamicAsm.DefineDynamicModule(asmName.Name, asmName.Name + ".dll");

        TypeBuilder tb = dynamicMod.DefineType("MyType",TypeAttributes.Public | TypeAttributes.UnicodeClass);

        MethodBuilder mb = tb.DefinePInvokeMethod(
            "MyCount",
            "Kernel32.dll",
            MethodAttributes.Public | MethodAttributes.Static | MethodAttributes.PinvokeImpl,
            CallingConventions.Standard,
            typeof(int),
            Type.EmptyTypes,
            CallingConvention.Winapi,
            CharSet.Ansi);

        mb.SetImplementationFlags(mb.GetMethodImplementationFlags() | MethodImplAttributes.PreserveSig);
        Type t = tb.CreateType();

        MethodInfo mi = t.GetMethod("MyCount");
        Console.WriteLine(mi.Invoke(null, null));

        Console.WriteLine(asmName.Name + ".dll");
        dynamicAsm.Save(asmName.Name + ".dll");
    }
}








19.5.Method
19.5.1.Deeper Reflection: iterate through the methods of the class
19.5.2.Deeper Reflection: Invoking Functions
19.5.3.Invoke methods using reflection
19.5.4.List Methods
19.5.5.Obtain the metadata tokens
19.5.6.Inspecting a method's body
19.5.7.Dynamically Invoking A Method
19.5.8.Finding Particular Members
19.5.9.Call string method with reflection and Expression
19.5.10.Invoke member method with created instance from reflection
19.5.11.Use reflection to invoke methods
19.5.12.Use DefinePInvokeMethod method to create a PInvoke method.
19.5.13.Get the method that matches the specified binding flags.