VB中如何动态调用dll

qybao 2004-10-23 07:10:27
请问在vb中如何动态调用dll
我只知道首先调用API LoadLibaray 装载dll
然后调用API GetProcAddress 得到dll的对应方法的地址
后面就不知道了
因为vb不像其他的有函数指针,在vb中要怎样声明函数原形,怎样把得到的函数地址赋给这个原形,希望哪位高人能指点,谢谢!
...全文
539 9 打赏 收藏 转发到动态 举报
写回复
用AI写文章
9 条回复
切换为时间正序
请发表友善的回复…
发表回复
supergreenbean 2004-10-26
  • 打赏
  • 举报
回复
我写的东西,你有兴趣就看看吧,你在自己写个类封装一下载入过程,应该就能满足你的需要了

http://210.33.90.250/download/vbsrc/vbanycall.rar
qybao 2004-10-26
  • 打赏
  • 举报
回复
to hhjjhjhj(大头)(想变胡萝卜^^)
如果我的dll很多岂不是要做很多类模块,而且我的dll是从ini文件中取进来,然后放到combo box去提供用户选择的,如果用这样的类模块扩展性就差了

to supergreenbean
你的代码我有时间看看,多谢了。

hhjjhjhj 2004-10-25
  • 打赏
  • 举报
回复
做几个"类模块"就行了,各个类模块中分别调用不同的DLL,就可以区别
Class1.Function(xxx)
Class2.Function(xxx)
这样,有相同函数名就不成问题.
qybao 2004-10-25
  • 打赏
  • 举报
回复
如果开始就声名了,就不是动态调用了
假如我现在有多个dll,每个dll都提供相同的接口,函数名相同,参数也相同,我要根据一定的条件去调用不同的dll,这时候不用loadlibrary又该如何去写?我是想vb里有没有函数原形的声名,就像一种类型,像c的函数指针
supergreenbean 2004-10-25
  • 打赏
  • 举报
回复
如果在vb中声明了,那就用不着使用函数指针调用了吧.就象在c中一样,如果你用隐式链接,那就不必调用loadlibrary之类的进行显示调用了.

我写的代码其实原理是差不多的,一种是上面那样通过CallWindowProc函数,另外一种通过修改com对象的vtable来实现方法的替换
qybao 2004-10-25
  • 打赏
  • 举报
回复
to leolan(史留香) 首先谢谢你给的思路,不过好像还不太符合我想知道的,毕竟这样的调用还是用到了api,离我的“函数指针”的想法有点差异,(我知道vb没有函数指针,我就是想知道用vb怎么能实现这样的函数指针,毕竟函数的地址已经得到了),但无论如何还是感谢你。

to Sun_Jianhua(铁拳),我不知道豆子是谁?不知道该如何联系,或者你帮我通知他一下,或者麻烦你再写一段代码看看吧,就小sample,应该不会很花时间的,谢了!
铁拳 2004-10-23
  • 打赏
  • 举报
回复
leolan(史留香) 的方法可调用的 api 灵活性不强,你找豆子看看,我上次给他一段源代码估计他还留着,很好的实现了楼主的需求,而且灵活性很强.后面两个字是多余的,我删不掉"权码"
leolan 2004-10-23
  • 打赏
  • 举报
回复
Create a new project and add this code to Form1
Private Declare Function FreeLibrary Lib "kernel32" (ByVal hLibModule As Long) As Long
Private Declare Function LoadLibrary Lib "kernel32" Alias "LoadLibraryA" (ByVal lpLibFileName As String) As Long
Private Declare Function GetProcAddress Lib "kernel32" (ByVal hModule As Long, ByVal lpProcName As String) As Long
Private Declare Function CallWindowProc Lib "user32" Alias "CallWindowProcA" (ByVal lpPrevWndFunc As Long, ByVal hWnd As Long, ByVal Msg As Any, ByVal wParam As Any, ByVal lParam As Any) As Long
Private Sub Form_Load()
On Error Resume Next
'KPD-Team 1999
'URL: http://www.allapi.net/
'E-Mail: KPDTeam@Allapi.net
'We're going to call an API-function, without declaring it!
Dim lb As Long, pa As Long
'map 'user32' into the address space of the calling process.
lb = LoadLibrary("user32")
'retrieve the address of 'SetWindowTextA'
pa = GetProcAddress(lb, "SetWindowTextA")
'Call the SetWindowTextA-function
CallWindowProc pa, Me.hWnd, "Hello !", ByVal 0&, ByVal 0&
'unmap the library's address
FreeLibrary lb
End Sub
aohan 2004-10-23
  • 打赏
  • 举报
回复
高手

1,486

社区成员

发帖
与我相关
我的任务
社区描述
VB API
社区管理员
  • API
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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