如何解决VB调用VC++编写的DLL时产生的参数传递问题

Anth 2000-07-09 01:48:00
诸位专家:
在最近的程序编写中遇上了一个很头痛的问题:我想把程序中的某一部分功能用VC来实现,故想采用动态链接库的方式。但VB程序在调用时出现了参数传递错误,错误名称为"Bad dll calling convention"<错误DLL调用约定>,经查资料得知是VB本身的问题,VB不是纯32位的开发平台.
如一个简单的函数Double(int value1),返回值为2*value1,但vb调用就是不行,诸位如若有这方面问题处理经验的敬请相告,感激不尽。
E_Mail: Anthonycha@cmmail.com
Tel : 021-62196860 or 62955700 or 64021174(home)
Name : 查(zha)国平
...全文
197 5 打赏 收藏 转发到动态 举报
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
wjf 2000-07-10
  • 打赏
  • 举报
回复
通常使用动态连接库中的输出函数都应该使用标准调用约定;
__stdcall由调用者清栈,
__cdecl由被调函数清栈,
函数调用完成后检查esi和esp是否相等,如果不相等,则说明调用约定有误
Janven 2000-07-10
  • 打赏
  • 举报
回复
其实不仅是VB会这样,VC编译的DLL在很多语言中调用均会出现这种问题,因为VC中默认的__cdecl调用是调用者清除堆栈,而__stdcall调用则是函数自己清除,用于其他语言应该用后者。
wgtech 2000-07-09
  • 打赏
  • 举报
回复
这个问题和我遇到的一样,要在编译时将VC编译器的__cdecl调用约定改为__stdcall调用
约定,编译后马上可以搞定。
ta 2000-07-09
  • 打赏
  • 举报
回复
Vc++ 中的数据定义和VB中的不一样.
比如: VC++ Int var, VB byval var as long
VC++ Double fun(), VB fun() as double
所以你需要确认他们的长度(int 8 byte in win32) 和 传递方式. byval or byref
如果是指针, 一般是 4个字节 所以VB中使用 as long 来代替.
sanhan 2000-07-09
  • 打赏
  • 举报
回复
参见

http://expert.csdn.net/Topic/13385.shtm

7,759

社区成员

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

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