안녕하세요
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 함수의 시작점을 찾을수가 없다는 메세지가 뜹니다.
고수님들의 도움 부탁드립니다...
제가 보기에는 Calling Conversion 문제는 아닌듯 합니다.
VC에서 함수 인자로 CString을 쓰는것이 잘못된것 같네요.
VC의 CString과 Delphi의 string은 엄연히 다르거든요.
CString을 쓰지 마시고 char*를 쓰시는 것이 나을것 같네요.
Delphi에서도 PChar를 사용하시는것이 좋을듯합니다.
즐프하세요 ^^