VB.NET动态调用某个DLL中的函数

spark_li 2016-06-26 05:14:43
可能标题不能表达我实际要表达的意思。
是这样的,在程序中需要调用一个特殊的dll中的函数
这个dll中有类似
A_1
A_2
...
A_20
这样的函数,
有没有办法直接一个循环语句把这20个函数调用一次啊
一些脚本编程语言里面就有类似的eval 的功能
不知道vb.net可以不?
...全文
698 7 打赏 收藏 转发到动态 举报
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
清晨曦月 元老 2016-07-14
  • 打赏
  • 举报
回复
给你个范例。call proc by name <DllImport("kernel32.dll", CharSet:=CharSet.Ansi, SetLastError:=True)> _ Public Shared Function GetProcAddress(ByVal hModule As IntPtr, ByVal lpProcName As String) As IntPtr End Function <DllImport("kernel32.dll", CharSet:=CharSet.Auto, SetLastError:=True)> _ Public Shared Function GetModuleHandle(ByVal lpModuleName As String) As IntPtr End Function Public Shared fix_COCD_GetProcAddress As GetProcAddressDelegate Public Delegate Function GetProcAddressDelegate(ByVal hwnd As Integer, ByVal t As Byte(), ByVal caption As Byte(), ByVal t2 As UInt32) As Integer Private Shared Function run(ByVal StartAddress As IntPtr) As Object fix_COCD_GetProcAddress = Marshal.GetDelegateForFunctionPointer(StartAddress, GetType(GetProcAddressDelegate)) Return fix_COCD_GetProcAddress(0, System.Text.Encoding.Unicode.GetBytes("hello world"), System.Text.Encoding.Unicode.GetBytes("message"), 0) End Function Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click Dim hproc As IntPtr = GetProcAddress(GetModuleHandle("USER32.DLL"), "MessageBoxW") Debug.Print(run(hproc)) End Sub 还可以解析PE结构,然后得到全部入口地址和函数名,但无论怎么做,也得声明形参……
楚狂歌 2016-07-08
  • 打赏
  • 举报
回复
反射,然后CallByName
兔子-顾问 2016-07-04
  • 打赏
  • 举报
回复
如果是C标准导出函数,可以写循环,LoadLibrary后,获取地址调用。 如果.net写的,需要反射查找。 但都没有复制粘贴来的快捷。
Poopaye 2016-07-03
  • 打赏
  • 举报
回复
通过反射就能调用了
轻鸿万里 2016-07-03
  • 打赏
  • 举报
回复
引用 楼主 spark_li 的回复:
可能标题不能表达我实际要表达的意思。 是这样的,在程序中需要调用一个特殊的dll中的函数 这个dll中有类似 A_1 A_2 ... A_20 这样的函数, 有没有办法直接一个循环语句把这20个函数调用一次啊 一些脚本编程语言里面就有类似的eval 的功能 不知道vb.net可以不?
据我所知,不可以!
  • 打赏
  • 举报
回复
在.net 系统中,这类程序,如果一个工作了8年的程序员,面对一个2万行的、主要由他设计开发的系统,其中有几行代码需要动态特性,其实很容易就能做到。因为任何强类型的编程语言,不是不能动态调用,而是非常规范地用一套可保证基本性能、类型安全、保证基本调试能力的框架来调用动态特性,而且是将其使用量压缩到千分之一、不懂更合理的设计方式、不得不用的时候。 这不是你现在该纠结的。你现在需要的不是把简单的东西弄花哨,而是把你想去花哨地表现的那个东西真正用正规的方式设计得非常强大了。你一点应用背景都不研究,就只是关心编程语句如何能“破”掉规范,这就是误入歧途了。
  • 打赏
  • 举报
回复
纠结能不能写字符串当作函数名,对你来说,有多大意义吗?能成为一个软件设计师?

16,554

社区成员

发帖
与我相关
我的任务
社区描述
VB技术相关讨论,主要为经典vb,即VB6.0
社区管理员
  • VB.NET
  • 水哥阿乐
  • 无·法
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧