vb.net 动态调用api

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(, New StringBuilder("haha"), New StringBuilder("title"), )
Console.WriteLine("ok")
Console.ReadLine()
End Sub
End Class
上一篇:使用SignalR ASP.NET Core来简单实现一个后台实时推送数据给Echarts展示图表的功能


下一篇:EF6.0 自定义Code First约定