업체에서 보내준 DLL을 프로그램에서 사용하여야 하는데
자꾸 에러가 나서 지금 며칠째 고생을 하고 있습니다.
그래서 업체에서 보내준 메뉴얼과 제가 코딩한 소스를 보시고
잘못된 부분을 지적해 주세요~~~
감사합니다!!!.
========================================================================
-- 업체에서 보내준 DLL 내의 함수 정의
(참고로 DLL 은 Borland C++ Builder로 작성했다고 함)
========================================================================
int Credit_Admit(char *pos_no, // 포스번호
char *s_date, // 일자(yyyymmdd)
char *s_time, // 시간(hhmmss)
long wcc, // Swipe=1, Key-in=2
char *ms_data, // 카드자료 (카드번호=
if Swipe -> 카드에서 읽은 자료모두
if Key-in -> 카드번호=유효기간
long halbu, // 할부기간
long amt, // 승인금액
char *Add_Data, // 추가자료
char *Msg // 되돌림변수
);
포스번호 : 4byte
거래일자 : 8byte : yyyymmdd
거래시간 : 6byte : hhmmss
거래유형 : 1byte : swipe=1, keyin=2
카드자료 : 40byte : if Swipe -> 카드에서 읽은 자료모두
if Key-in -> 카드번호=유효기간
할부 : 2byte : 일시불("00")
금액 : 8byte :
추가자료 :
되돌림변수 :
Msg = STX+구분+FS+응답코드+FS+승인번호+FS+전표번호+FS+매입처코드+FS+매입처일련번호+FS+매출번호+FS+카드발급처+FS+가맹점번호+FS+매입사명+FS+NOTICE+ETX
Return Value : 0 :정상처리
0 이외의값 : 오류
========================================================================
-- 위의 자료를 보고서 내가 코딩한 내용
(참고로 제가 의심되는 부분은 함수의 파라미터 중에서 메세지를 받아오는 (msg)
부분이 잘못되지 않았나 추측하는데 어떻게 해야할 지를 몰라서요....TT)
========================================================================
unit dllTest;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls;
type
TForm1 = class(TForm)
Button1: TButton;
procedure Button1Click(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;
var
Form1: TForm1;
implementation
{$R *.dfm}
function Credit_Admit(pos_no:PChar;
s_date:PChar;
s_time:PChar;
wcc:PChar ;
ms_data:PChar;
halbu: LongInt;
amt: LongInt;
add_data:PChar;
var msg:PChar):
Integer; stdcall; external 'ccard32.dll' name 'Credit_Admit';
procedure TForm1.Button1Click(Sender: TObject);
var
i : integer;
msg : PChar;
begin
i := Credit_Admit(PChar('0001'),
PChar('20040202'),
PChar('192701'),
PChar('1'),
PChar('1111222288889999=07041011770840267509'),
0,
1000,
PChar('PC|PC|0022|906021'),
msg);
ShowMessage(IntToStr(i));
end;
end.
================================================================
위의 소스를 컴파일 하면 리턴값이 넘어오고,
ShowMessage 도 실행이 되는데
그 후에 "Access Violation at Address 1C1C1C1C. Read of Address 1C1C1C1C"
에러가 납니다.
업체에 물어보니까 우리가 보낸데이터가 그쪽에 저장은 되어있다고 합니다.
그래서 추측에 그쪽에서 보내는 (Msg에 들어갈) 내용을 못받아서 그런것
같은데 이것저것 다해보아도 안되네요....
그럼 한번 봐주시고 오늘 하루도 즐프하시길.....
선언부가 Char **Msg 가 되야 한다고 생각되는데 Char *Msg 인걸로 봐선
Msg 위치에 문자열을 써주는것 같습니다. 이런 경우는 델파이에서 Msg를
GetMem으로 할당하고 받아야 합니다.
그리고 Char **Msg 라면 델파이로 var Msg:PChar 가 되고
Char *Msg 면 그냥 Msg:PChar 가 됩니다.