Delphi Programming Forum
C++Builder  |  Delphi  |  FireMonkey  |  C/C++  |  Free Pascal  |  Firebird
볼랜드포럼 BorlandForum
 경고! 게시물 작성자의 사전 허락없는 메일주소 추출행위 절대 금지
델파이 포럼
Q & A
FAQ
팁&트릭
강좌/문서
자료실
컴포넌트/라이브러리
FreePascal/Lazarus
볼랜드포럼 홈
헤드라인 뉴스
IT 뉴스
공지사항
자유게시판
해피 브레이크
공동 프로젝트
구인/구직
회원 장터
건의사항
운영진 게시판
회원 메뉴
북마크
델마당
볼랜드포럼 광고 모집

델파이 Q&A
Delphi Programming Q&A
[14277] Re:[질문]dll 사용을 하는데 오류가 나옵니다. 어찌하는지??
쿠핑 [couping] 2134 읽음    2012-05-17 13:37
찾았습니다.
KCPDataProcPos = function(strIp: string; lPort:Longint; StrCard:string; strRet:PChar):boolean; stdcall;
==> KCPDataProcPos = function(strIp: string; lPort:Longint; StrCard:string; strRet:string):boolean; stdcall;
로 바꾸고

strRet : PChar; => strRet : string; 로 바꾼 후

strRet를 메모리 할당을 해주니 되는군요
SetLength(strRet,1024);  <==이렇게요~~

결국

procedure TForm1.Button1Click(Sender: TObject);
type
  KCPDataProcPos = function(strIp: string; lPort:Longint; StrCard:string; strRet:string):boolean; stdcall;
var
  i:integer;
  s : string;
  DataProcPos : KCPDataProcPos;
  dll_hwd : THandle;
  cData : array[0..1024] of char;
  iRet : boolean;
  strRet : PChar;
  r, strRet2 : string;
  ReturnCheck : boolean;
  sl: TStringList;
begin
         
    s := '';
    s := s + STX;
    s := s + 'TEST';    //T18O   단말기 버전
    s := s + FS;
    s := s + '1100';      //1100  거래구분코드
    s := s + FS;
    s := s + '2000010166'; //단말기ID
    s := s + FS;
    s := s + '20';         //거래유형
    s := s + FS;
    s := s + 'IV5AIC6F02D1FCB1=5WU51011416279172070';    //카드번호(암호화)
    s := s + FS;
    s := s + '';          //비밀번호
    s := s + FS;
    s := s + '00';        //할부개월수
    s := s + FS;
    s := s + '00020000';  //거래금액
    s := s + FS;
    s := s + '00000000';   //봉사료
    s := s + FS;
    s := s + '00002000';   //세금
    s := s + FS;
    s := s + '120517';     //거래일자
    s := s + FS;
    s := s + 'N';          //망취소유무
    s := s + ETX;

  try

    SetLength(strRet2,1024);
    FillChar(cData, SizeOf(cData), #0);
    dll_hwd := LoadLibrary('KCPDLL.dll');
    @DataProcPos := GetProcAddress(dll_hwd, 'KCPDataProcPos');
    iRet := DataProcPos('192.168.0.5', 29976, s, strRet2);

    //r := strRet;
    edGetData.Text := strRet2;

    FreeLibrary(dll_hwd);
   
  except

  end;
end;


이렇게 하니 되네요~~~아고 ~~이걸로 엄청 고생했는데~~

쿠핑 님이 쓰신 글 :
: procedure TfrmTEST.btnConfirmClick(Sender: TObject);
: type
:   KCPDataProcPos = function(strIp: string; lPort:Longint; StrCard:string; strRet:PChar):boolean; stdcall;
: var
:   i:integer;
:   s : string;
:   DataProcPos : KCPDataProcPos;
:   dll_hwd : THandle;
:   cData : array[0..1024] of char;
:   iRet : boolean;
:   strRet : PChar;
:   r : string;
:   ReturnCheck : boolean;
: begin
:     s := '';
:     s := s + STX;
:     s := s + 'TEST';    //T18O   단말기 버전
:     s := s + FS;
:     s := s + '1100';      //1100  거래구분코드
:     s := s + FS;
:     s := s + '2000010166'; //단말기ID
:     s := s + FS;
:     s := s + '20';         //거래유형
:     s := s + FS;
:     s := s + edEncryptNum.Text;    //카드번호(암호화)
:     s := s + FS;
:     s := s + '';          //비밀번호
:     s := s + FS;
:     s := s + '00';        //할부개월수
:     s := s + FS;
:     s := s + '00020000';  //거래금액
:     s := s + FS;
:     s := s + '00000000';   //봉사료
:     s := s + FS;
:     s := s + '00002000';   //세금
:     s := s + FS;
:     s := s + '120517';     //거래일자
:     s := s + FS;
:     s := s + 'N';          //망취소유무
:     s := s + ETX;
:
:   try
:     FillChar(cData, SizeOf(cData), #0);
:     dll_hwd := LoadLibrary('KCPDLL.dll');
:     @DataProcPos := GetProcAddress(dll_hwd, 'KCPDataProcPos');
:     iRet := DataProcPos('192.168.0.5', 29976, s, strRet);
:
:     edGetData.Text := strRet;
:
:     FreeLibrary(dll_hwd);
:    
:   except
:
:   end;
:
: end;
:
:
: 이렇게 DLL을 사용하도록 처리를 하였습니다. dll은 VB로 만들어져 있는 DLL 입니다.
:
: 그런데 strRet 값을 받기만 하면 access violation at address~~~~ 이런 오류가 나옵니다.
:
: 이럴땐 어떻게 하는건가요???
:
: 답변 좀 부탁드리겠습니다.

+ -

관련 글 리스트
14276 [질문]dll 사용을 하는데 오류가 나옵니다. 어찌하는지?? 쿠핑 1903 2012/05/17
14277     Re:[질문]dll 사용을 하는데 오류가 나옵니다. 어찌하는지?? 쿠핑 2134 2012/05/17
Google
Copyright © 1999-2015, borlandforum.com. All right reserved.