关闭

VB调用DLL导出函数出现“Bad DLL call convention”的解决

标签: dllvbwinapipascalcallbackfile
3925人阅读 评论(0) 收藏 举报
分类:
用VB6调用VC6下编译的DLL中的导出函数,调试运行时会报告“Bad DLL call convention”,而编译成EXE以后直接运行则没有问题。
上网查阅文章后发现,解释方式下的VB调用C语言写的函数,仅限于PASCAL调用约定的函数,也就是stdcall方式,而C方式的函数(cdecl)是不行的,编译运行时无此限制。
解决方法,打开DLL文件源代码,在导出函数的声明和实现前面都加上关键字__stdcall,例如:
// in head file:
int __stdcall myFunction();
 
// in cpp file:
int __stdcall myFunction () { ... }
重新编译DLL并再次运行VB程序,问题解决。

由此不难理解为什么Windows API函数的声明中为什么都有一个“WINAPI”,例如

int
WINAPI
MessageBoxA(
    HWND hWnd ,
    LPCSTR lpText,
    LPCSTR lpCaption,
    UINT uType);

 

因为在windef.h中有以下定义:

#define CALLBACK    __stdcall
#define WINAPI      __stdcall
#define WINAPIV     __cdecl
#define APIENTRY    WINAPI
#define APIPRIVATE  __stdcall
#define PASCAL      __stdcall

 


 

参考网址:http://support.microsoft.com/kb/158905/EN-US/

0
0

查看评论
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
    个人资料
    • 访问:230799次
    • 积分:2031
    • 等级:
    • 排名:第19869名
    • 原创:42篇
    • 转载:0篇
    • 译文:0篇
    • 评论:69条
    文章分类
    最新评论
    未分类