Windows7 64비트 운영체제에서
델파이 2010 버전으로 응용 프로그램을 만들었습니다.
호출할 DLL은 Windows XP 32비트 버전에서 C++ Builder 6 로 만들었구요
[문의사항]
<!--CodeS-->
//
// Call 하는 부분 Delphi 2010 Source
//
function TFormCreditMain.fRequest: integer;
type
TFunc = function(Flag:integer; src:string; dest:pchar):smallint;stdcall;
var
H : THandle;
MyFunc : TFunc;
sFileName : string;
sSendBuf : string;
sRecvBuf : array [0..1024] of char;
nFlag : integer;
nRet : integer;
begin
sFileName := ExtractFilePath(Application.ExeName) + 'test.dll';
nFlag := 0;
sSendBuf := '1111111111111111111111111111111111111111111111111111111111';
FillChar(sRecvBuf,sizeof(sRecvBuf),#0);
try
H := LoadLibrary(PChar(sFileName));
if H<32 then begin
MessageDlg('test.dll파일이 없습니다',mtWarning,[mbOK],0);
result := 0;
exit;
end;
@MyFunc := GetProcAddress(H, 'request');
if not (@MyFunc = nil) then begin
nRet := MyFunc(nFlag,sSendBuf, sRecvBuf);
ShowMessage(sRecvBuf); // <--- 이부분 출력시 버퍼 내용이 깨져서 보입니다
end;
FreeLibrary(H);
except
MessageDlg(format('DLL load error.(%s)',[sFileName]),mtWarning,[mbOK],0);
result := -1;
exit;
end;
result := 1;
end;
//
// C++ Builder6로 만든 DLL Source
//
extern "C" __export int __stdcall request(int Flag, char *src, char *dest)
{
sprintf(dest,"%s","1111");
return 1;
}
<!--CodeE-->
Delphi 7 버전에서는 잘 사용했던 코드 인데
Delphi 2010으로 작성해서 Call 하니 수신받은 sRecvBuf의 내용이 깨져서 보이네요
DLL에서 숫자로 넘겨도, 영문자로 넘겨도 다 깨져서 보이네요
개발환경적 문제인지 어떤 문제 인지 알 수 가 없네요
도움을 주실 수 있는 분이 계시면 답변좀 부탁 드리겠습니다 (_ _);;
2010에서 호출할때는 string이네요... 2010은의 string은 UnicodeString입니다.
string대신에 AnsiString형을 사용하거나 유니코드로 변경해서 쓰세요.
참고로 델파이 7의 string은 AnsiString입니다.