VC++로 만든 dll에서 델파이 어플리케이션의 callback 함수로 리턴값을 주는데 어플리케이션의 함수가 실행은 되는데 리턴받은 값을 사용하려고만 하면 에러가 access violation error가 발생합니다.
VC++ code
char * DoTest()
{
char *buf;
buf = (char *)malloc(sizeof(UCHAR)*1510);
for (int i=0; i<10; i++)
buf[i] = 4;
return buf;
}
Delphi code
procedure TForm.ButtonClick(Sender: TObject);
var
strData: string;
pchardata: PChar;
begin
pchardata:= DoTest();
strData:= Strpas(pchardata);
edit.Text:= strData;
end;
고수님들 좀 봐주세요...
> VC++로 만든 dll에서 델파이 어플리케이션의 callback 함수로 리턴값을 주는데 어플리케이션의 함수가 실행은 되는데 리턴받은 값을 사용하려고만 하면 에러가 access violation error가 발생합니다.
>
> VC++ code
>
> char * DoTest()
> {
> char *buf;
> buf = (char *)malloc(sizeof(UCHAR)*1510);
> for (int i=0; i<10; i++)
> buf[i] = 4;
> return buf;
> }
>
>
> Delphi code
>
> procedure TForm.ButtonClick(Sender: TObject);
> var
> strData: string;
> pchardata: PChar;
> begin
> pchardata:= DoTest();
> strData:= Strpas(pchardata);
> edit.Text:= strData;
> end;
>
> 고수님들 좀 봐주세요...
C++에서 작성된 dll을 호출할때 호출규약을 cdecl을 사용하여 보세요
만약 stdcall을 사용하였을 경우 dll내의 함수가 정상적으로 처리되고
리턴값을 받는 쪽에서 access violation error가 발생하는 것을 보았습니다