Q&A

  • VC++ dll 을 호출하는데
안녕하세요
window 프로그램, delphi 왕초보입니다
일단 검색을 통해 알아보려했는데 통 알수가 없어서 도움을 청합니다.

delphi 로 만든 dll에서 VC 로 만든 dll 의 함수를 호출하려 하는데
자꾸 error 가 나네요
제 생각엔 calling conversion 문제가 아닌가 싶은데...

아래는 VC에서 선언된 함수 입니다

__declspec(dllimport) BOOL _stdcall OpenCommPort(CString sPortName, DWORD dwBaud, WORD wPortID, HWND hOpenWnd);
__declspec(dllimport) void _stdcall CloseCommPort();
__declspec(dllimport) DWORD _stdcall WriteToComm(BYTE *pBuff, DWORD nToWrite);

그리고 delphi 에서는 다음과 같이 선언했습니다

function OpenCommPort(sPortName : string; dwBaud : Word; wPortId :  
      Byte; hOpenWnd : hWnd):Boolean; stdcall;
      external 'KMPS_Serial.dll'   name 'OpenCommPort';
procedure CloseCommPort(); stdcall;  external 'KMPS_Serial.dll'
      name 'CloseCommPort';
function WriteToCom( pBuff : pstring;  nToWrite : pstring): Integer ;
     stdcall; external 'KMPS_Serial.dll' name 'WriteToCom';

아래는 delphi dll 에서 호출하는 부분입니다
TestResult :=  OpenCommPort('COM1',9600,0,Frm_FinishB.WindowHandle);

compile 에서는 이상이 없고 delphi dll 실행하면 바로 OpenCommPort 함수의 시작점을 찾을수가 없다는 메세지가 뜹니다.

고수님들의 도움 부탁드립니다...
2  COMMENTS
  • Profile
    srookie 2004.08.27 20:22
    안녕하세요.
    제가 보기에는 Calling Conversion 문제는 아닌듯 합니다.
    VC에서 함수 인자로 CString을 쓰는것이 잘못된것 같네요.
    VC의 CString과 Delphi의 string은 엄연히 다르거든요.
    CString을 쓰지 마시고 char*를 쓰시는 것이 나을것 같네요.
    Delphi에서도 PChar를 사용하시는것이 좋을듯합니다.

    즐프하세요 ^^

  • Profile
    최영일 2004.08.28 01:14
    많은 도움이 되었습니다