Q&A

  • VC++ dll 에서 리턴받은 값에서 에러가 생겨요.
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;



고수님들 좀 봐주세요...

1  COMMENTS
  • Profile
    stein 2001.11.10 18:39
    털털이 wrote:

    > 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가 발생하는 것을 보았습니다