要调用一个delphi写的DLL,DLL里的函数说明是这样的:
1、delphi函数原型
function MoveReadRecord(nPort : Integer;pointerReaderData : PReaderDataOfOnePack) : Integer;stdcall;
2、参数说明:nPort:要操作的串口。
pointerReaderData:指向ReaderDataOfOnePack结构体的指针。
ReaderDataOfOnePack结构体定义:
ReaderDataOfOnePack = Record
nRecordType : Integer; //记录类型,暂时可以不考虑
nModemId : Integer; //通讯座号
nModemRecordId : Array[1..12] of Integer; //通讯座中记录编号
nReaderId : Integer; //巡检器号
nReaderRecordId : Array[1..12] of Integer; //在巡检器中的记录编号
nRecordCount : Integer; //记录数,就是本次读取得到的记录的数量。
byteFailCount : Byte; //失败次数,就是本次读取有错记录的条数
charCardNo : Array[1..12] of Array[1..21] of Char; //卡号,一个记录的卡号占一维,最多12条记录的卡号。
timeTemp : Array[1..12] of TDateTime; //记录刷卡时间,最多12条记录的时间。
end;我调用一直都不对,是传这个结构体的指针有问题,不知该怎么写,下面是我写的一些代码,我今天可是第一天用delphi,犯低级错误可别笑话我:)type ReaderDataOfOnePack = Record
nRecordType : Integer;
nModemId : Integer;
nModemRecordId : Array[1..12] of Integer;
nReaderId : Integer;
nReaderRecordId : Array[1..12] of Integer;
nRecordCount : Integer;
byteFailCount : Byte;
charCardNo : Array[1..12] of Array[1..21] of Char;
timeTemp : Array[1..RecordCountOfOnePack] of TDateTime;
end;pointerReaderData:ReaderDataOfOnePack; pointerReaderData.nRecordType:=0;
pointerReaderData.nModemId:=0;
for i:=1 to RecordCountOfOnePack do
pointerReaderData.nModemRecordId[i]:=0;
pointerReaderData.nRecordCount:=0;
pointerReaderData.byteFailCount:=0;
for i:=1 to RecordCountOfOnePack do
begin
for j:=1 to 21 do
pointerReaderData.charCardNo[j][i]:='0';
end;
for i:=1 to RecordCountOfOnePack do
pointerReaderData.timeTemp[i]:=2005-7-4;MoveReadRecord(port,pointerReaderData);//到这里就错了,请各位叔叔阿姨帮帮忙
1、delphi函数原型
function MoveReadRecord(nPort : Integer;pointerReaderData : PReaderDataOfOnePack) : Integer;stdcall;
2、参数说明:nPort:要操作的串口。
pointerReaderData:指向ReaderDataOfOnePack结构体的指针。
ReaderDataOfOnePack结构体定义:
ReaderDataOfOnePack = Record
nRecordType : Integer; //记录类型,暂时可以不考虑
nModemId : Integer; //通讯座号
nModemRecordId : Array[1..12] of Integer; //通讯座中记录编号
nReaderId : Integer; //巡检器号
nReaderRecordId : Array[1..12] of Integer; //在巡检器中的记录编号
nRecordCount : Integer; //记录数,就是本次读取得到的记录的数量。
byteFailCount : Byte; //失败次数,就是本次读取有错记录的条数
charCardNo : Array[1..12] of Array[1..21] of Char; //卡号,一个记录的卡号占一维,最多12条记录的卡号。
timeTemp : Array[1..12] of TDateTime; //记录刷卡时间,最多12条记录的时间。
end;我调用一直都不对,是传这个结构体的指针有问题,不知该怎么写,下面是我写的一些代码,我今天可是第一天用delphi,犯低级错误可别笑话我:)type ReaderDataOfOnePack = Record
nRecordType : Integer;
nModemId : Integer;
nModemRecordId : Array[1..12] of Integer;
nReaderId : Integer;
nReaderRecordId : Array[1..12] of Integer;
nRecordCount : Integer;
byteFailCount : Byte;
charCardNo : Array[1..12] of Array[1..21] of Char;
timeTemp : Array[1..RecordCountOfOnePack] of TDateTime;
end;pointerReaderData:ReaderDataOfOnePack; pointerReaderData.nRecordType:=0;
pointerReaderData.nModemId:=0;
for i:=1 to RecordCountOfOnePack do
pointerReaderData.nModemRecordId[i]:=0;
pointerReaderData.nRecordCount:=0;
pointerReaderData.byteFailCount:=0;
for i:=1 to RecordCountOfOnePack do
begin
for j:=1 to 21 do
pointerReaderData.charCardNo[j][i]:='0';
end;
for i:=1 to RecordCountOfOnePack do
pointerReaderData.timeTemp[i]:=2005-7-4;MoveReadRecord(port,pointerReaderData);//到这里就错了,请各位叔叔阿姨帮帮忙
PReaderDataOfOnePack = ^ReaderDataOfOnePack;声明变量
pointerReaderData: PReaderDataOfOnePack;