首页 > 代码库 > vb.net 动态调用api

vb.net 动态调用api

Imports SystemImports System.Runtime.InteropServicesPublic Class DllInvoke    Public Sub New(ByVal DLLPath As String)        Me.hLib = DllInvoke.LoadLibrary(DLLPath)    End Sub    Protected Overrides Sub Finalize()        Try            DllInvoke.FreeLibrary(Me.hLib)        Finally            MyBase.Finalize()        End Try    End Sub    <DllImport("kernel32.dll")> _    Private Shared Function FreeLibrary(ByVal [lib] As IntPtr) As Boolean    End Function    <DllImport("kernel32.dll")> _    Private Shared Function GetProcAddress(ByVal [lib] As IntPtr, ByVal funcName As String) As IntPtr    End Function    Public Function Invoke(ByVal APIName As String, ByVal t As Type) As [Delegate]        Return Marshal.GetDelegateForFunctionPointer(DllInvoke.GetProcAddress(Me.hLib, APIName), t)    End Function    <DllImport("kernel32.dll")> _    Private Shared Function LoadLibrary(ByVal path As String) As IntPtr    End Function    Private hLib As IntPtrEnd Class

 

Imports SystemImports System.Runtime.CompilerServicesImports System.Runtime.InteropServicesImports System.TextPublic Class test    Private Declare Function MessageBoxA Lib "user32" Alias "MessageBoxA" (ByVal hwnd As Integer, ByVal lpText As StringBuilder, ByVal lpCaption As StringBuilder, ByVal wType As Integer) As Long    Private Delegate Function MessageBoxADelegate(ByVal hwnd As Integer, ByVal lpText As StringBuilder, ByVal lpCaption As StringBuilder, ByVal wType As Integer) As Long    Public Shared Sub Main()        Dim invoke As New DllInvoke("user32.dll")        Dim mode As MessageBoxADelegate = DirectCast(invoke.Invoke("MessageBoxA", GetType(MessageBoxADelegate)), MessageBoxADelegate)        mode.Invoke(0, New StringBuilder("haha"), New StringBuilder("title"), 0)        Console.WriteLine("ok")        Console.ReadLine()    End SubEnd Class