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
[14809] Re:Re:[질문]dll함수 호출시 vc에서 char*로 보내는 파라메터는 PChar으로하면 에러가 납니다.
라미엘 [] 2083 읽음    2013-10-12 01:49
같은 에러가 나네요... PAnsiChar로 선언된 매개변수에 PAnsiChar()로 캐스팅해 넘기면 마지막에 널문자가 들어가지 않아서 문제가 될까요? 장비제조사에서 받은 샘플 프로그램에서는 BK_ScanToBMPFile() 프로시져를 콜하면 바로 장비가 작동하는데 저는 BK_ScanToBMPFile()을 호출하면 약 4~5초간 프로그램이 응답없음이 되다가 그후 result :='스캔실패';로 넘어가 실행되고 바로 Access Violation이 발생합니다. 제가 직접 dll을 컨트롤 하는것이 처음이라 너무 힘들어요... 혹 전체 소스와 dll을 올리면 도움주실수 있을까요? 원래 제가 델파이 파트가 아닌데 어쩌다가 델파이를 하게되어 요즘 부족함을 많이 느끼고 있습니다... 도와주세요.


DigitalNomad 님이 쓰신 글 :
: DLL 헤더 선언부와 델파이 소스를 살펴보니 선언부는 문제는 없어 보이는데요..
: 다음과 같이 한번 바꿔서 해보세요.
:
: BKV3_API int  WINAPI BK_ScanToBMPFile(char *upperName, char *bottomName);
:
: //델파이 소스
:
 
:  function  BK_ScanToBMPFile(upperName:PAnsiChar; bottomName:PAnsiChar):integer cdecl; external 'BKV3.dll';
:   
:  procedure TForm1.Button1Click(Sender: TObject);
:   var FrontFilePath, 
:         BackFilePath:AnsiString;
:  begin
:        FrontFilePath := 'aaa.jpg'+#0 ;
:        BackFilePath  := 'bbb.jpg'+#0 ;
:        if BK_ScanToBMPFile(PAnsiChar(FrontFilePath),PAnsiChar(BackFilePath))<>1 then   
:               //정상 실행되지 않아 에러체크루틴으로 들어갑니다.
:        begin
:            result := '스캔실패';     //<<====에러 메세지 출현 지점
:            exit;
:        end;
:  end;
: 
: 

:
:
:
:
: 라미엘 님이 쓰신 글 :
: : 염치불구하고 다시 질문올립니다. 아래 dll관련 파라메터 질문을 올렸는데 다른 부분에서 에러가 나서 답답한 마음에 재질문올립니다. dll개발사에서 보내준 vc6.0샘플 소스에는 dll함수를 external선언할때 char*로 파라메터를 설정했는데 델파이2009로 설정할때 PChar 또는 PAnsiChar로 설정해도 access violation에러가 납니다. 특이한 것은 델파이 자체에서 나는 에러가 아니라 dll내부에서 나는 에러같습니다. 디버깅을 하면 다음 루틴(에러확인 루틴)으로 넘어가는데 그 이후 첨부파일과 같은 메세지가 뜹니다.
: : 고수님들 다시한번만 도와주세요...
: :
: : //VC소스
: :
: : #ifdef __cplusplus
: : extern "C"
: : {
: : #endif
: :  BKV3_API int  WINAPI BK_ScanToBMPFile(char *upperName, char *bottomName);
: : #ifdef __cplusplus
: : }
: : #endif
: :
: :
: : void aaaDLG::OnScan()
: : {
: :     int rc;
: :
: :
: :     rc = BK_ScanToBMPFile((char *)(LPCSTR)m_strUpperName, (char *)(LPCSTR)m_strBottomName);
: :     if (rc != 1) {
: :         EndWaitCursor();
: :         sprintf(szString, "No Paper or Scan Error !, rc = %d", rc);
: :         MessageBox(szString, "BKV3", MB_OK);
: :         return;
: :     }
: : }
: :
: :
: : //델파이 소스
: :
: : function  BK_ScanToBMPFile(upperName:PAnsiChar; bottomName:PAnsiChar):integer cdecl; external 'BKV3.dll';
: :
: :
: : procedure TForm1.Button1Click(Sender: TObject);
: :
: : var FrontFilePath, BackFilePath:String;
: : begin
: :
: :       FrontFilePath := 'aaa.jpg' ;
: :       BackFilePath  := 'bbb.jpg' ;
: :       if BK_ScanToBMPFile(PAnsiChar(AnsiString(FrontFilePath)),PAnsiChar(AnsiString(BackFilePath)))<>1 then    //정상 실행되지 않아 에러체크루틴으로 들어갑니다.
: :       begin
: :           result := '스캔실패';     //<<====에러 메세지 출현 지점
: :           exit;
: :       end;
: : end;
: :

+ -

관련 글 리스트
14802 [질문]dll함수 호출시 vc에서 char*로 보내는 파라메터는 PChar으로하면 에러가 납니다. 라미엘 1903 2013/10/10
14808     Re:[질문]dll함수 호출시 vc에서 char*로 보내는 파라메터는 PChar으로하면 에러가 납니다. DigitalNomad 2058 2013/10/11
14809         Re:Re:[질문]dll함수 호출시 vc에서 char*로 보내는 파라메터는 PChar으로하면 에러가 납니다. 라미엘 2083 2013/10/12
14810             Re:Re:Re:[질문]dll함수 호출시 vc에서 char*로 보내는 파라메터는 PChar으로하면 에러가 납니다. DigitalNomad 1879 2013/10/12
14811                 Re:Re:Re:Re:[질문]dll함수 호출시 vc에서 char*로 보내는 파라메터는 PChar으로하면 에러가 납니다. 라미엘 1912 2013/10/13
14812                     Re:Re:Re:Re:Re:[질문]dll함수 호출시 vc에서 char*로 보내는 파라메터는 PChar으로하면 에러가 납니다. DigitalNomad 2566 2013/10/13
14813                         감사합니다. 덕분에 잘 해결되었습니다. 라미엘 1861 2013/10/14
14803     Re:[질문]dll함수 호출시 vc에서 char*로 보내는 파라메터는 PChar으로하면 에러가 납니다. civilian 2043 2013/10/10
14804         Re:Re:[질문]dll함수 호출시 vc에서 char*로 보내는 파라메터는 PChar으로하면 에러가 납니다. 라미엘 2085 2013/10/10
Google
Copyright © 1999-2015, borlandforum.com. All right reserved.