VC中调用DLL的函数参数有关问题
VC中调用DLL的函数参数问题
函数原型:int MF_Getsnr (unsigned char mode, unsigned char halt, unsigned char *snr,unsigned char *value);
snr, 返回的1个字节
value 返回的4个字节
这一个函数在VC中怎么调用啊?
------解决方案--------------------
unsigned char mode;
unsigned char halt;
unsigned char snr;
unsigned char value[4];
MF_Getsnr (mode, halt, &snr, value);
------解决方案--------------------
要对函数返回值进行检查
hDLL=LoadLibrary("mi.dll");//加载动态链接库mi.dll文件;
if (NULL == hDll)
return;
MF_Getsnr=(pMF_Getsnr)GetProcAddress(hDLL,"MF_Getsnr");
if (NULL == MF_Getsnr)
return;
pMF_Getsnr(mode,halt,&snr,value); //前面那个p去掉!
------解决方案--------------------
需要确认DLL的开发环境,是VC吗?开发环境的源代码到底把接口定义成什么调用方式。
Windows的API 除特殊情况外,一般使用的是stdcall约定。
1)从cdecl改成stdcall后,你的程序运行不报ESP错误,说明编译后的代码对栈指针处理是正确的,应该是stdcall没错。
2)你说返回值不对,但cdecl和stdcall对于int类型的返回值的处理方法都一样。那返回值不对的原因应该是传入参数的问题。
函数原型:int MF_Getsnr (unsigned char mode, unsigned char halt, unsigned char *snr,unsigned char *value);
snr, 返回的1个字节
value 返回的4个字节
这一个函数在VC中怎么调用啊?
------解决方案--------------------
unsigned char mode;
unsigned char halt;
unsigned char snr;
unsigned char value[4];
MF_Getsnr (mode, halt, &snr, value);
------解决方案--------------------
要对函数返回值进行检查
hDLL=LoadLibrary("mi.dll");//加载动态链接库mi.dll文件;
if (NULL == hDll)
return;
MF_Getsnr=(pMF_Getsnr)GetProcAddress(hDLL,"MF_Getsnr");
if (NULL == MF_Getsnr)
return;
pMF_Getsnr(mode,halt,&snr,value); //前面那个p去掉!
------解决方案--------------------
需要确认DLL的开发环境,是VC吗?开发环境的源代码到底把接口定义成什么调用方式。
Windows的API 除特殊情况外,一般使用的是stdcall约定。
1)从cdecl改成stdcall后,你的程序运行不报ESP错误,说明编译后的代码对栈指针处理是正确的,应该是stdcall没错。
2)你说返回值不对,但cdecl和stdcall对于int类型的返回值的处理方法都一样。那返回值不对的原因应该是传入参数的问题。