微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

VB6.0软件调用VS C++ DLL问题解决

源起

之前为设备的DLL供客户二次开发,包括C++,C#等调用都没有问题,以一个函数为例,C文件和H文件里写法如下:

UCHAR CharToHex(UCHAR ch)
extern "C" __declspec(dllexport) UCHAR  CharToHex(UCHAR ch);//字符转16进制

但日前有一个客户还在用VB6.0开发,调用总是出现:实时错误“49”:DLL调用约定错误

解决问题

在网上查了一些资料,如下三个地方修改才可以。
C文件修改如下:

UCHAR __stdcall CharToHex(UCHAR ch)

H文件里相应修改如下:

extern "C" __declspec(dllexport) UCHAR  __stdcall  CharToHex(UCHAR ch);//字符转16进制

原因是VB6.0中调用认是标准的,需要强制转换成“__stdcall”。

DEF文件中需要添加此接口:

; xxxDll.def : 声明 DLL 的模块参数。

LIBRARY

EXPORTS
    ; 此处可以是显式导出
CharToHex

重新生成解决方案,即可。

参考

总结一下DLL函数声明的一些问题:http://blog.csdn.net/wangwenjing90/article/details/9047853/
DLL 导出函数 _stdcall 和 _cdecl调用约定:http://www.jb51.cc/article/p-pdiqgyed-bka.html

原文地址:https://www.jb51.cc/vb/256446.html

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐