您的位置:首页 > 编程语言 > VB

vb.net 动态调用api

2014-07-24 13:33 267 查看
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
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: