zoukankan      html  css  js  c++  java
  • 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(0, New StringBuilder("haha"), New StringBuilder("title"), 0)
            Console.WriteLine("ok")
            Console.ReadLine()
        End Sub
    End Class
  • 相关阅读:
    590. N-ary Tree Postorder Traversal
    700. Search in a Binary Search Tree
    885. Spiral Matrix III
    876. Middle of the Linked List
    908. Smallest Range I
    java中Class对象详解和类名.class, class.forName(), getClass()区别
    应用层之web和http
    122. 买卖股票的最佳时机 II
    129. 求根到叶子节点数字之和
    849. 到最近的人的最大距离
  • 原文地址:https://www.cnblogs.com/nanfei/p/3865407.html
Copyright © 2011-2022 走看看