VBGood网站全文搜索 Google

搜索VBGood全站网页(全文搜索)

VB爱好者乐园(VBGood)

 找回密码
 立即注册
搜索
楼主: reker

最简单的VB动态调用外部函数(附源代码)

[复制链接]
 楼主| 发表于 2008-8-14 20:29:53 | 显示全部楼层
原帖由 PctGL 于 2008-8-14 14:49 发表
是少弹了,开始我理解错了,我以为是 call api,原来是 jmp
但栈堆错误依旧存在,之所以没有发生问题,是因为栈一直在累加,最后调用的函数取栈顶的参数
就不会有问题

开始我的理解是
push 10次
call api
ret ...

那就不知道了。。。反正一旦使用debugger下断,程序100%崩溃。肯定与seh有关
反正seh具体是什么我也不知道。。。我只知道是个链表用来处理错误
回复 支持 反对

使用道具 举报

发表于 2008-8-17 16:55:10 | 显示全部楼层
原帖由 reker 于 2008-8-14 20:29 发表

那就不知道了。。。反正一旦使用debugger下断,程序100%崩溃。肯定与seh有关
反正seh具体是什么我也不知道。。。我只知道是个链表用来处理错误


SEH 不知道是什么就能想说什么就来什么...
被扩展到fs的错误处理,这是基本的错误处理,我发现有的编译器不直接用seh而是调用系统api setxxxhandle 从系统的角度应对错误处理
好像很xx
回复 支持 反对

使用道具 举报

发表于 2008-8-22 20:37:56 | 显示全部楼层
看源码,多少看懂些,但对原理是一点不懂,-_-!!! 但是据LZ介绍,如此调用可以直接调用API,比VB代理的方式要快些,我觉的此方法的应用还是有一定空间的.
但是我发现LZ的源码在调用myRunDLL32函数前,总要先获得要执行函数的地址(比如MessageBoxA),总共三行代码吧,如果每执行一个函数都要执行这样一些代码,是不是很繁琐,不如把这个求 "要执行的函数的地址"的过程也写进myRunDLL32函数中,只不过加一个参数,在调用时,一行代码就解决问题了.
Private Sub myRunDLL32(FuncName as string,Optional ByVal a As Long = 0, ........
.......
下面还可以对FuncName的值的合法性进行核对.

非常冒昧,如说得不对,大家包涵吧
回复 支持 反对

使用道具 举报

 楼主| 发表于 2008-8-23 20:53:24 | 显示全部楼层
原帖由 xlong2 于 2008-8-22 20:37 发表
看源码,多少看懂些,但对原理是一点不懂,-_-!!! 但是据LZ介绍,如此调用可以直接调用API,比VB代理的方式要快些,我觉的此方法的应用还是有一定空间的.
但是我发现LZ的源码在调用myRunDLL32函数前,总要先获得要执行 ...

事实上如果写了多个myFunc,只需要程序开始运行的时候初始化一下,以后就可以直接当成vb函数调用了
回复 支持 反对

使用道具 举报

发表于 2008-8-23 21:40:07 | 显示全部楼层
请问下这样调用和declare调用有什么有点?
回复 支持 反对

使用道具 举报

发表于 2008-8-23 22:27:45 | 显示全部楼层
写插件比较方便
回复 支持 反对

使用道具 举报

发表于 2008-8-25 13:23:35 | 显示全部楼层
先收着,呵呵
回复 支持 反对

使用道具 举报

头像被屏蔽
发表于 2008-8-29 00:22:32 | 显示全部楼层
高人。。。。
回复 支持 反对

使用道具 举报

发表于 2008-8-31 11:21:52 | 显示全部楼层
同意....
回复 支持 反对

使用道具 举报

发表于 2008-9-5 07:38:32 | 显示全部楼层
呵呵,学校下
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

文字版|手机版|小黑屋|VBGood  

GMT+8, 2022-6-29 20:10

VB爱好者乐园(VBGood)
快速回复 返回顶部 返回列表