널문자는 없어도 되는데 혹시나 해서 추가한 것입니다.
그렇게 복잡한 DLL 함수는 아닌것 같은데 장비가 없으니
정상 작동 여부까지는 알수가 없네요..
초기화쪽에 문제가 있으서 그런가..
일단 제조사에서 받으신 샘플 프로그램과 DLL등 테스트 프로그램을 올려줘 보세요.
델파이쪽 프로그램도 테스트 프로그램 전체 소스를 올려줘 보시구요..
한번 확인해 보겠습니다.
라미엘 님이 쓰신 글 :
: 같은 에러가 나네요... 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;
: : :