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
  • 相关阅读:
    Android开发使用Glide获取图片背景色淡绿色解决办法
    Android 获取 View 宽高的常用正确方式,避免为零
    Android之自定义View来接收输入法输入的内容
    FileProvider使用详解(拍照、安装APP、共享文件)
    简明 homebrew
    更优雅地使用命令行
    一篇长文说 git 基础
    chrome 浏览器的使用技巧
    前端学命令行
    cocos 碰撞系统
  • 原文地址:https://www.cnblogs.com/nanfei/p/3865407.html
Copyright © 2011-2022 走看看