讀取ic卡,如何將Buffer轉成String |
尚未結案
|
wang000f
一般會員 發表:16 回覆:28 積分:8 註冊:2003-10-08 發送簡訊給我 |
unit dlldecl; interface type
PAnsiString = ^AnsiString;
PBYTE = ^BYTE;
PInteger = ^Integer;
PSmallInt = ^SmallInt;
PDuration = ^Duration;
Duration = {packed }record
StartDate: array[0..6] of Byte;
EndDate: array[0..6] of Byte;
end; //基本資料
PBasicInfo = ^BasicInfo;
BasicInfo = {packed }record
CardNo: array[0..11] of Byte;
Name: array[0..19] of Byte;
ID : array[0..9] of Byte;
end; {下面這段是我模仿上面所寫的,是可正確抓取,但我不知道這樣的寫法是否正確,因為還有好多的抓取值,是不是一直要這樣去定義呢?,可不可以不去定義就直接抓取呢?}
//預防保健
PPreventInfo = ^PreventInfo;
PreventInfo=Record
Pre1: array[1..3] of Byte;
Dat1: array[4..7] of byte;
end; var
p: BasicInfo; { 3.2.1 掛號或報到時讀取基本資料 }
function hisGetRegisterBasic(Buffer: PByte; BufLen: PInteger): Integer; stdcall;
{ 3.3.1 預防保健掛號作業 }
function hisGetRegisterPrevent(Buffer: PByte; BufLen: PInteger): Integer; stdcall;
|
wang000f
一般會員 發表:16 回覆:28 積分:8 註冊:2003-10-08 發送簡訊給我 |
procedure TForm1.btnReadCardClick(Sender: TObject);
var
Buffer: BasicInfo;
Length: Integer;
Res: Integer;
i, LowIndex, HighIndex: Integer;
sRetMsg: string;
begin
sRetMsg := '';
lblRetCode.Caption := sRetMsg; Length := sizeof(Buffer);
Res := hisGetRegisterBasic(PByte(@Buffer), @Length); if Res = 0 then
begin
lblCardNo.Caption := GetFromBuffer(Buffer.CardNo);
lblName.Caption := GetFromBuffer(Buffer.Name);
lblIDNo.Caption := GetFromBuffer(Buffer.ID);
lblBirthDay.Caption := GetFromBuffer(Buffer.BirthDay);
|
wang000f
一般會員 發表:16 回覆:28 積分:8 註冊:2003-10-08 發送簡訊給我 |
指標的部份現在實在找不到可供參考的資料,
事實上我是可模仿下面的方式照本宣科每個function均給他一組就解決了,但我不知道這樣的寫法在實際上線時,會不會出問題,因為我至少要建個20幾組,有沒有人可提供點建議呢?
PBasicInfo = ^BasicInfo;
BasicInfo = {packed }record
CardNo: array[0..11] of Byte;
Name: array[0..19] of Byte;
ID : array[0..9] of Byte;
end;
|
juantonia
一般會員 發表:14 回覆:12 積分:5 註冊:2003-07-10 發送簡訊給我 |
unit dlldecl; interface type
PAnsiString = ^AnsiString;
PBYTE = ^BYTE;
PInteger = ^Integer;
PSmallInt = ^SmallInt;
PDuration = ^Duration;
Duration = {packed }record
StartDate: array[0..6] of Byte;
EndDate: array[0..6] of Byte;
end; RRegBasic = record
CardNo : array[0..11] of Char; //卡片號碼
Name : array[0..19] of Char; //姓名
PersonID : array[0..9] of Char; //身份證字號
BirthDay : array[0..6] of Char; //生日
..
...
...
end; 在程式中
private
_BufferLen,_RetNo: Integer;
_CardNo,_Name,_PersonID,_Birthday:string; procedure TForm1.btnReadCardClick(Sender: TObject);
var
Buffer: RRegBasic;
begin
_BufferLen := Sizeof(Buffer);
_RetNo := hisGetRegisterBasic(PByte(@Buffer), @_BufferLen);
if _RetNo<>0 then begin
ShowMessage('錯誤訊息');
exit;
end;
_CardNo :=Buffer.CardNo;
_Name :=Trim(Buffer.Name);
_PersonID :=Trim(Buffer.PersonID);
_Birthday :=Trim(Buffer.BirthDay);
..
..
end;
|
wang000f
一般會員 發表:16 回覆:28 積分:8 註冊:2003-10-08 發送簡訊給我 |
本站聲明 |
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。 2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。 3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇! |