源起
之前为设备的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)
extern "C" __declspec(dllexport) UCHAR __stdcall CharToHex(UCHAR ch);//字符转16进制
原因是VB6.0中调用默认是标准的,需要强制转换成“__stdcall”。
; 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 举报,一经查实,本站将立刻删除。