如何解决VB调用VC++编写的DLL时产生的参数传递问题 参见http://expert.csdn.net/Topic/13385.shtm 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 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 来代替. 这个问题和我遇到的一样,要在编译时将VC编译器的__cdecl调用约定改为__stdcall调用约定,编译后马上可以搞定。 其实不仅是VB会这样,VC编译的DLL在很多语言中调用均会出现这种问题,因为VC中默认的__cdecl调用是调用者清除堆栈,而__stdcall调用则是函数自己清除,用于其他语言应该用后者。 通常使用动态连接库中的输出函数都应该使用标准调用约定;__stdcall由调用者清栈,__cdecl由被调函数清栈,函数调用完成后检查esi和esp是否相等,如果不相等,则说明调用约定有误 代码框 光标问题 如何向MSHFlexGrid中添加新记录? 新手!!100分急求简单的DLL程序段~~谢谢 vb的Long类型 使用 “Form2.Show 1,Form1” ,Form2会闪动?Textbox的RightToLeft属性不能改?? vb连SQL Server数据库问题-为什么不成功啊?急!! 急、、、、、vb与excel 的问题 关于数据库中一对多表的问题 急,如果我想用一个按钮让另外一个按钮里的循环终止,一定要用多线程吗?? 怎样让控件识别第一次单击和第二次单击? 怎样删除文件内容? 如何在form上按下shift键同时连续响应enter键?
比如: 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 来代替.
约定,编译后马上可以搞定。
__stdcall由调用者清栈,
__cdecl由被调函数清栈,
函数调用完成后检查esi和esp是否相等,如果不相等,则说明调用约定有误