动态连接库中的函数,解释后出现问题,求救!!! Delphi / Windows SDK/APIhttp://www.delphi2007.net/DelphiAPI/html/delphi_20061129092530151.html
我有个动态连接库,还有c的头文件,我把翻译成Delphi的时候出现了点问题,大家帮忙看看啊:
LONG WINAPI XPosition(ULONG iIndex);
float XReadOut(ULONG iIndex);
这两个函数,C的头文件里面的,翻译成D的函数后如下:
function XPosition(iIndex : Longword) : longint;stdcall;external 'CardDLL.dll';
function XReadOut(iIndex : Longword) : Single;stdcall;external 'CardDLL.dll';
不知道这样翻译有没有问题?
因为我现在遇到这样的情况,凡是C中函数名前有WINAPI的,翻译成D的函数后都好用,凡是没有WINAPI的,都出现内存读取错误???
是调用惯例上的差异,你把不带WINAPI的调用惯例改成cdecl
function XReadOut(iIndex : Longword) : Single;stdcall;external 'CardDLL.dll';
改为
function XReadOut(iIndex : Longword) : Single;cdecl;external 'CardDLL.dll';
......说明
cdecl: c\c++缺省的参数传递方式
stdcall: WinAPI的参数传递方式
DELPHI HELP:
The cdecl convention is useful when you call functions from shared libraries written in C or C++,
刚才查了查,什么参数传递方式的问题,修改后就好了,谢谢!