Use the DefinePInvokeMethod method to create a PInvoke method : MethodInfo « Reflection « VB.Net Tutorial






Imports System
Imports System.Text
Imports System.Reflection
Imports System.Reflection.Emit
Imports System.Runtime.InteropServices

Public Class Example

    Public Shared Sub Main() 
        Dim asmName As New AssemblyName("YourAssemblyName")
        Dim dynamicAsm As AssemblyBuilder = AppDomain.CurrentDomain.DefineDynamicAssembly(asmName,AssemblyBuilderAccess.RunAndSave)

        Dim dynamicMod As ModuleBuilder = dynamicAsm.DefineDynamicModule(asmName.Name, asmName.Name & ".dll")

        Dim tb As TypeBuilder = dynamicMod.DefineType("MyType",TypeAttributes.Public Or TypeAttributes.UnicodeClass)

        Dim mb As MethodBuilder = tb.DefinePInvokeMethod("GetTickCount", _
            "Kernel32.dll", _
            MethodAttributes.Public Or MethodAttributes.Static Or MethodAttributes.PinvokeImpl, _
            CallingConventions.Standard, _
            GetType(Integer), _
            Type.EmptyTypes, _
            CallingConvention.Winapi, _
            CharSet.Ansi)

        mb.SetImplementationFlags(mb.GetMethodImplementationFlags() Or MethodImplAttributes.PreserveSig)

        Dim t As Type = tb.CreateType()

        Dim mi As MethodInfo = t.GetMethod("GetTickCount")
        Console.WriteLine(mi.Invoke(Nothing, Nothing))

        Console.WriteLine("Saving: " & asmName.Name & ".dll")
        dynamicAsm.Save(asmName.Name & ".dll")

    End Sub  
End Class








19.2.MethodInfo
19.2.1.Get a parameterless method named MethodA for that type, and executes the method.
19.2.2.Use Reflection to get all method names
19.2.3.Use Reflection to get all member names
19.2.4.Use the DefinePInvokeMethod method to create a PInvoke method
19.2.5.Add the MethodImplAttributes.PreserveSig flag to the method implementation flags