아! 아래 답변 주신 분이신가요. 제가 델파이 업무를 맡은지 얼마 되지 않았는데 막히는 부분이 있어 아래 답변주신것에 대해 자세히 언급을 못했네요... 죄송합니다. 우선 아래 게시글에서 주신 답변대로 해보았으나 잘되지않았습니다. 그래서 델마당에 같은 질문을 올려서 답변을 받은 것이 되어서 다음 루틴을 진행을 했는데 에러가 나서 재질문을 올렸습니다. 계속된 밤샘작업에 위에서 기한압박을 해서 제가 올린 질문에 책임을 다하지 못한점 다시한번 죄송합니다.
그리고 아래 질문은 dll함수를 external하는 부분을 function BK_SetScanParameter(var pScanParam : ScanParameter):integer cdecl; external 'BKV3.dll'; 로 선언하니 해당 루틴은 에러없이 진행되었습니다.
civilian 님이 쓰신 글 :
: 질문과 답에 여러 사람들이 시간을 투자해서 답을 쓰는 이유는
: 그런 지식들이 쌓여 동일한 어려움을 겪는 분들에게
: 도움이 되길 바래서일겁니다.
:
: 아래 유사한 질문이 있었고, 그에 대한 답글이 있었는데
: 그 방법을 적용하여 문제가 해결되었는지에 대한 언급은
: 없이 또 질문을 올리셨군요.
: 이래서야 이것이 지식으로서의 가치가 있을까요?
:
: 라미엘 님이 쓰신 글 :
: : 염치불구하고 다시 질문올립니다. 아래 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;
: :
|