VB中调用VC编写的DLL函数参数类型不匹配错误!VC程序如下:/***********//Test1.cpp/*********** #include "stdafx.h"#include "Test1.h" TEST1_API int Max(int a,int b){ return (a>b)?a:b;} TEST1_API int test(){ return 56;}/***********//Test1.h/***********#ifdef TEST1_EXPORTS#define TEST1_API extern "C" __declspec(dllexport)#else#define TEST1_API extern "C" __declspec(dllimport)#endif TEST1_API int Max(int a,int b);TEST1_API int test(); 在工程设置的预编译里定义TEST1_EXPORTS VB程序如下:Module文件:Public Declare Function Max Lib "Test1.dll" (ByVal a As Long, ByVal b As Long) As IntegerPublic Declare Function test Lib "Test1.dll" () As Integer 正文程序:Private Sub Command1_Click()Dim c As Integerc = Max(25, 36)End Sub 运行时产生如果调用Max()函数产生Run-Time error'49': Bad DLL calling convention的错误。但调用test函数则正常。用depends工具能看到导出的函数,并且DLL文件也已经放到windows目录下 请问是哪里出问题了?曾经把(ByVal a As Long, ByVal b As Long)这里换成了好几种数据类型都不行,真是没办法了!
=>
Public Declare Function Max Lib "Test1.dll" (ByVal a As Long, ByVal b As Long) As LongTEST1_API int test()
=>
Public Declare Function test Lib "Test1.dll" () As Long导出函数的时候建议还是用.def文件,这样就不必担心那些c编译器自己加修饰符的问题了.__stdcall修饰符可以表明函数的调用模式,一般api都是用__stdcall的
=>
Public Declare Function Max Lib "Test1.dll" (ByVal a As Long, ByVal b As Long) As Long这样还是不行啊,还是提示同样的错误!!!但那个不带参数的函数
TEST1_API int test()
=>
Public Declare Function test Lib "Test1.dll" () As Long
调用就正常。还是找不出原因!!!!
采用__stdcall方式,这样Delphi等可正常调用...
http://blog.csdn.net/goodname008/archive/2004/07/24/50662.aspx利用底层键盘钩子拦载任意按键(回调版)
http://blog.csdn.net/goodname008/archive/2005/01/18/258215.aspx
[这是一个很好的VB调用VC编写的DLL的例子]