Imports System Imports System.Runtime.InteropServices Public 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 IntPtr End Class
Imports System Imports System.Runtime.CompilerServices Imports System.Runtime.InteropServices Imports System.Text Public 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 Sub End Class
vb.net 动态调用api
时间: 2024-10-10 05:26:58