社区
API
帖子详情
vb调用c的dll后出现内存不能读写的错误??
summy_0201
2004-12-23 11:29:55
在一个模块里声明了dll函数,并写了funtion,在其中调用了dll函数,并在主程序中调用了funtion,调试时调用dll函数时抱错“dll调用约定错误”,编译后,运行程序无此错误,但抱程序错误“内存不能读也不能写”?可以认定dll函数调用成功了,这是怎么回事啊?该怎么解决?
...全文
247
6
打赏
收藏
vb调用c的dll后出现内存不能读写的错误??
在一个模块里声明了dll函数,并写了funtion,在其中调用了dll函数,并在主程序中调用了funtion,调试时调用dll函数时抱错“dll调用约定错误”,编译后,运行程序无此错误,但抱程序错误“内存不能读也不能写”?可以认定dll函数调用成功了,这是怎么回事啊?该怎么解决?
复制链接
扫一扫
分享
转发到动态
举报
写回复
配置赞助广告
用AI写文章
6 条
回复
切换为时间正序
请发表友善的回复…
发表回复
打赏红包
summy_0201
2004-12-27
打赏
举报
回复
没办法了,我暂时在调用过dll后 On Error Resume Next了一下,问题解决。谢谢各位了。
asmgirl
2004-12-25
打赏
举报
回复
gz
blueice12
2004-12-24
打赏
举报
回复
方法1 : 调用那个函数完毕后,自己修复堆栈。
其实C调用和stdcall调用的差别就在于,c调用是调用者恢复堆栈,而stdcall是被调用者恢复堆栈。而VB在调用所有的dll函数的时候都是采用stdcall的方式。见下面的示意代码:
StdCall :
push arg2
push arg1
call func
这就是stdcall方式调用 func( arg1,arg2 )的代码
CCall:
push arg2
push arg1
call func
add esp,8
多出来的一句就是恢复堆栈的代码,注意,只要让esp + 4 * 参数个数,堆栈就可以恢复。
这样就需要在VB里面插入机器码来直接操作esp寄存器,具体如何插入汇编代码可以参看网上的文章。因为只是插入一句代码,所以也可以静态修改编译出的文件来实现。
方法2: 自己用VC重新包装那个dll,也就是在VC里面定义一个新的函数:
__stdcall func( arg1, arg2 )
{
oldfunc( arg1,arg2 );
}
这里要注意,oldfunc要声明为 cdecl约定的,然后把这个源文件编译成一个obj文件,连接到VB工程中。
当然,重新封装一个dll也是可以的,但是那样发布的时候就需要发布两个dll了,有点太麻烦。
qiqi5521
2004-12-23
打赏
举报
回复
//dll我是改不了的,是第三方的dll,我要在vb里用里面的函数!
如果这个DLL的函数不是 _stdcall ,那么最好不要用,即使勉强能用,但实际上会破坏系统堆栈的平衡
http://community.csdn.net/Expert/topic/3654/3654315.xml?temp=.1760675
summy_0201
2004-12-23
打赏
举报
回复
但如果我编译执行程序,则不会出现“dll调用约定错误”,而且dll函数调用成功啊,但是vb会提示“未设置对象变量”??肯定是一调用了dll函数,便会这样的,程序代码本身没问题啊!能告诉我怎么回事啊?被这个查不出来的错误快逼疯了!!
下面是dll的.h文件里的开头内容:
#ifdef __cplusplus
extern "C" {
#endif
这个就是那个调用声明吗?我不太懂,这是vb能调用的模式吗?如果不行,要怎么办?dll我是改不了的,是第三方的dll,我要在vb里用里面的函数!
marckle
2004-12-23
打赏
举报
回复
用c写的dll,调用约定要改成__stdcall,而不是却省的_cdecl*方式。
按键精灵与
VB
结合
VB
界面与按键小精灵完美结合实现窗体句柄、类别及标题的获取(含源代码):其中整合了
VB
界面的制作,托管图标的刷新,文件的
读写
、按键精灵外部程序的
调用
与关闭,窗体句柄、类别、标题的获取,文件的创建、删除及
读写
等功能,最值得一提的是结合
VB
的界面直观显示实时窗体信息,既克服了
VB
不能
直接
调用
按键精灵
dll
等插件命令的问题,也克服了按键精灵界面只能读取输入
不能
实时界面输出显示的缺陷,实现了
VB
强大界面功能与按键精灵经典
DLL
插件函数的完美融合。其中包含了
VB
的源代码与按键小精灵源代码(注:按键精灵代码请先安装按键精灵8以后版本再进行修改)。
VB
驱动级
内存
读写
,不用
DLL
,直接加载*.sys文件
VB
驱动级
内存
读写
示例,游戏外挂开发,过NP、HS必须。
VB
驱动
调用
。
USB-IC
读写
器M1卡
VB
.NET示例源码.rar
vb
.net
调用
DLL
动态库函数
读写
IC卡,函数说明:https://blog.csdn.net/zhangjin7422/article/details/82714533
VB
界面与按键精灵完美结合(含源代码)
VB
界面与按键小精灵完美结合实现窗体句柄、类别及标题的获取(含源代码):其中整合了
VB
界面的制作,托管图标的刷新,文件的
读写
、按键精灵外部程序的
调用
与关闭,窗体句柄、类别、标题的获取,文件的创建、删除及
读写
等功能,最值得一提的是结合
VB
的界面直观显示实时窗体信息,既克服了
VB
不能
直接
调用
按键精灵
dll
等插件命令的问题,也克服了按键精灵界面只能读取输入
不能
实时界面输出显示的缺陷,实现了
VB
强大界面功能与按键精灵经典
DLL
插件函数的完美融合。其中包含了
VB
的源代码与按键小精灵源代码(注:按键精灵代码请先安装按键精灵8以后版本再进行修改)。 PS:小精灵是去广告版的哦。。。。
VB
.net
读写
XML文件源代码
VB
.net
读写
XML文件源代码,此项目源代为
DLL
形式,在
调用
时需注意函数接口
API
1,486
社区成员
23,280
社区内容
发帖
与我相关
我的任务
API
VB API
复制链接
扫一扫
分享
社区描述
VB API
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
暂无公告
试试用AI创作助手写篇文章吧
+ 用AI写文章