delphi中调用C写的动态连接库时指针声明的问题!急!出188分(188分)

  • 主题发起人 主题发起人 wugr
  • 开始时间 开始时间
W

wugr

Unregistered / Unconfirmed
GUEST, unregistred user!
请大家帮忙,我在连接动态连接库的时候,调用用C写的函数,如下面的函数在H头中声明如下
__int16 __stdcall rf_select(HANDLE icdev,unsigned long _Snr,unsigned char *_Size);
在Delphi下的声明如下
function rf_select(icdev :THANDLE;
_Snr: Integer;
_Size:^byte):smallint;
stdcall;
external 'Mwrf32.dll';
可是在编译的时候总是报错,如下:
[Error] Hp_ICstatus.pas(33): Identifier expected but '^' found
如果改成下面的形式不会报错,但是读出的字符串或是数字就不是原来想要的值,请高手指教如何声明类似的字符指针或整型指针。
function rf_select(icdev :THANDLE;
_Snr: Integer;
_Size:byte):smallint;
stdcall;
external 'Mwrf32.dll';
function rf_select(icdev :THANDLE;
_Snr: Integer;
_Size:pointer):smallint;
stdcall;
external 'Mwrf32.dll';
 
C语言写的DLL不能在delphi下直接引用,要直接引用必须将C中的声明改为
extern "C"
如 extern "C" {_Int16 rf_select(HANDLE icdev,unsigned long
_Snr,unsigned char *_Size)}
 
换成PChar试一下。
 
好象还要加 FAR PASCAL 定义作为公用函数的。
用来统一WINDOWS函数行参、实参的栈格式!
还有用const, var定义的行参、实参都影响其之间调用的不匹配!
 
我现在仅仅是指针调用格式不匹配的问题,其他非指针格式的参数调用的返回值都是正确的。
所以,对上面大家的回答我先表示感谢,但是还是没有解决问题。但我还是会给大家积分的,谢谢。
 
Jams 不是已经说了吗?
_Size:PChar;即可。
另外,参数声明不能直接用^,只有先定义为类型,再声明,例如:
type
mypointertype=^byte;
function ...(...;_size:mypointertype)
(实际上pchar就是这种东西)
这两种方法都可以,你试验一下吧。
 
多人接受答案了。
 
后退
顶部