初學 DLL,語法錯誤,不會改...><:: |
答題得分者是:Rain
|
littlefactor
一般會員 發表:24 回覆:25 積分:9 註冊:2002-07-11 發送簡訊給我 |
各位高手大家好:
現在試著在寫DLL,就想說把信用卡檢核的function寫成DLL
我想做到呼叫DLL的一個function,然後這個function會去呼叫其他function(同樣都在DLL裡),我看書的DLL範例以及網站上的範例都沒這種function中再呼叫其他function,我知道語法錯了,見笑了,還真的不知道如何改..
高手們可以指點迷津一下嗎?
library chk_function; uses SysUtils, Classes; {$R *.res} function Check_Credit_Card(const p_crd_cd:string;const p_type:char):boolean; export; begin if Check_Card_No(p_crd_cd,Get_Card_Cd(p_type)) = false then Check_Credit_Card := False else Check_Credit_Card := True; end; function Get_Card_Cd(const p_crd_nm : string):char ; begin if p_crd_nm = '聯合信用卡' then Result := 'U'; if p_crd_nm = 'AMEX' then Result := 'A'; if p_crd_nm = 'MASTER' then Result := 'M'; if p_crd_nm = 'VISA' then Result := 'V'; if p_crd_nm = 'JCB' then Result := 'J'; if p_crd_nm = 'DINER' then Result := 'D'; if p_crd_nm = '' then Result := ' '; end ; function Check_Card_No(const p_crd_cd:string;const p_type:char):boolean; begin case p_type of 'U':result:=union(p_crd_cd); 'A':result:=AMEX(p_crd_cd); 'M':result:=VISA(p_crd_cd); 'V':result:=VISA(p_crd_cd); 'J':result:=VISA(p_crd_cd); 'D':result:=DINER(p_crd_cd); else result:=false; end; end; function VISA(const p_crd_cd : string):boolean; var iCount,product : integer ; begin Result := true ; if length(p_crd_cd)= 16 then begin product :=0; for icount := 1 to 15 do begin If Icount mod 2 = 0 then product := product strtoint(copy(p_crd_cd,icount,1)) else product := product ((strtoint(copy(p_crd_cd,Icount,1))*2) div 10) ((strtoint(copy(p_crd_cd,Icount,1))*2) mod 10); end ; if strtoint(copy(p_crd_cd,16,1)) <> ((10 - (product mod 10)) mod 10 ) then result := false ; end else result := false ; end; function AMEX(const p_crd_cd : string):boolean; var iCount,product : integer ; begin Result := true ; if ((copy(p_crd_cd,1,2)='34') or (copy(p_crd_cd,1,2)= '37')) and (length(p_crd_cd)= 15)then begin product :=0; for icount := 1 to 15 do begin If icount mod 2 <> 0 then product := product strtoint(copy(p_crd_cd,icount,1)) else product := product ((strtoint(copy(p_crd_cd,icount,1))*2) div 10) ((strtoint(copy(p_crd_cd,icount,1))*2) mod 10); end ; if product mod 10 <> 0 then result := false ; end else result := false; end; function DINER(const p_crd_cd : string) : boolean; begin if copy(p_crd_cd,1,2)<> '36' then result := false else begin if length(p_crd_cd)<>14 then result := false else result := true; end; end; function Union(const p_crd_cd :string):boolean; var Lst_digit,product,product_wt: integer; begin Result := true ; if length(p_crd_cd)= 11 then begin product:= (strtoint(copy(p_crd_cd,1,1))*7) (strtoint(copy(p_crd_cd,2,1))*3) (strtoint(copy(p_crd_cd,3,1))*5) (strtoint(copy(p_crd_cd,4,1))*6) (strtoint(copy(p_crd_cd,5,1))*7) (strtoint(copy(p_crd_cd,6,1))*9) (strtoint(copy(p_crd_cd,7,1))*8) (strtoint(copy(p_crd_cd,8,1))*5) (strtoint(copy(p_crd_cd,9,1))*9) (strtoint(copy(p_crd_cd,10,1))*7); product_wt:= ( (product DIV 100) * 5 ) ( ((product MOD 100) DIV 10 )* 9 ) ( (product MOD 10) * 7 ) ; Lst_digit:=strtoint( copy(p_crd_cd,11,1)); if Lst_digit= (10 - ( ((product_wt MOD 10) 3) MOD 10 )) mod 10 then result:=true else result:=false; end else result:=false; end; exports Check_Credit_Card; begin end.發表人 - littlefactor 於 2003/04/07 18:18:30 |
Rain
資深會員 發表:31 回覆:236 積分:268 註冊:2003-02-17 發送簡訊給我 |
/
我想做到呼叫DLL的一個function,然後這個function會去呼叫其他function(同樣都在DLL裡),我看書的DLL範例以及網站上的範例都沒這種function中再呼叫其他function
/ 這樣子沒什麼不可以,沒有任何問題的,只是你的程式中把
Check_Credit_Card函數放在最前邊,又去調用後面的函數,當然
會出錯,你要把Check_Card_No這個函數放在Check_Credit_Card函數的前邊才可以調用,象下面這樣就可以了,其他的函數也同樣。
function Check_Card_No(const p_crd_cd:string;const p_type:char):boolean;
begin
…
end;
function Check_Credit_Card(const p_crd_cd:string;const p_type:char):boolean; export;
begin
Check_Card_No…;
end; Once and only once
|
littlefactor
一般會員 發表:24 回覆:25 積分:9 註冊:2002-07-11 發送簡訊給我 |
本站聲明 |
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。 2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。 3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇! |