delphi调用 dll ,字符串参数的返回(100分)

  • 主题发起人 主题发起人 madm
  • 开始时间 开始时间
M

madm

Unregistered / Unconfirmed
GUEST, unregistred user!
sztapp.dll 内有一个函数 ,在delphi中如何调用
int _stdcall Ifn_QueryStatus_USER(char * CommPort, char * ret1, char * ret2, char * ret3, char * ret4, unsigned long * ret5, char * ret6, int * ret7, int * ret8, char * ret9);
//设备状态查询
//输入参数:
//CommPort: 端口号, COM1、COM2 - COM4
//输出参数:
//ret1: SAMID, 8BYTE ASCII-BCD (SAMID 内容 0x00 0x00 0x01 0x21 表示为 "00000121")
//ret2: 编号 9BYTE Number
//ret3: 设备软件版本号 10BYTE ASCII
//ret4: 设备状态字 32BYTE BIN-Number (数据内容0101表示,参考深圳通小额消费设备接口设计 5.3设备状态定义)
//ret5: 当前剩余额度 unsigned long
//ret6: 当前额度参数名 28Byte ASCII
//ret7: 当前未上传交易记录数 INT
//ret8: 当前未上传灰记录数 INT
//ret9: 当前设备时间信息 16BYTE Number yyyyMMddHHmmssww(y年,M月,d日,H时,m分,s秒,w星期)

我是这样写的,但有问题,请写直接清楚

定义:
function Ifn_QueryStatus_USER(CommPort:pchar; var ret1, ret2, ret3, ret4: pchar;
var ret5:Longword ; var ret6:pchar;var ret7, ret8:integer;var ret9:pchar):INTEGER;
stdcall; external 'sztapp.dll';
引用:
var r1 :pChar;
r2 :pChar;
r3 :pChar;
r4 :pChar;
r6 :pChar;
r9 :pChar;
r5:Longword ;
E,r7,r8:integer;
begin
r1:=StrAlloc(8);
r2:=StrAlloc(9);
r3:=StrAlloc(10);
r4:=StrAlloc(32);
r6:=StrAlloc(28);
r9:=StrAlloc(16);

E:=Ifn_QueryStatus_USER(pchar(ComboBox1.TEXT),r1,r2,r3,r4,r5,r6,r7,r8,r9);
Memo1.Lines.Add(INTTOSTR(E));
Memo1.Lines.Add(r1);
Memo1.Lines.Add(r2);
Memo1.Lines.Add(r3);
Memo1.Lines.Add(r4);
Memo1.Lines.Add(r6);
Memo1.Lines.Add(r9);

函数可用执行但是返回的值都不对!
 
var
r1,r2,r3,r4,r6,r9:array [0..512] of char;
 
to: llaaddoo 试过了不行
 
function Ifn_QueryStatus_USER(
CommPort:pchar;
ret1, ret2, ret3, ret4: pchar;
var ret5:Longword ;
ret6:pchar;
var ret7, ret8:integer;
ret9:pchar):INTEGER;
stdcall; external 'sztapp.dll';
 
to tseug, ok了!太感谢了! 为什么整型的要用 Var 指针就不用呢?
 
能解释一下就最好了!马上给分
 
var ret7, ret8:integer;与ret7, ret8:Pinteger 效果一样,
var 指示字标明传过去的是一个指针
 
后退
顶部