Q&A

  • VC dll 함수 사용시 인자 형식 문제
Visuall C++ 로 만든 DLL 을 이용해서
프로그램을 하고 있습니다.

DLL  프로그램에서 사용하는 함수 중

char *ptr ; // 전역으로 포인터 사용.


int TestDLL(char *buff){
.....
......

   ptr = buff ;  // 버퍼의 주소를 DLL의 전역포인터로  넘긴다.
}

이런식으로 사용하고 있습니다.
buff에는 약 512K 정도의 char 문자가 들어 있습니다. ( 스트링이 아니고요... 즉 널 문자가 끝에 붙지 않습니다 )  

TestDLL 이란 함수를 델파이에서 Call해서  사용할 때
char *buff 인자를  델파이에선 어떻게 선언해야
정확한 건가요?

function TestDLL(pbuff : PChar)  : integer ;stdcall;external 'myDLL' ;

이렇게 선언하는게 맞는 건가요?

아님
function TestDLL(pbuff : Array of Char) : integer ;stdcall;external 'myDLL' ;

아님
function TestDLL(pbuff : Pointer) : integer ;stdcall;external 'myDLL' ;

이렇게 해야 하나요?

둘다 가끔씩  메모리 엑세스 문제가 나서요...
참고로 DLL 쪽에선 아무런 문제가 없음이
확인되었습니다.
아무래도 선언 쪽에 문제가 있는 것 같기도 하구...
도와주세요...
1  COMMENTS
  • Profile
    남양원 2004.02.24 01:56
    function TestDLL(pbuff : PChar)  : integer ;cdecl;external 'myDLL' ;
    stdcall 이 아닌 cdecl로 하세요. 저 이것 때문에 무지하게 고생했었습니다.
    인자가 있는 C++로 만든 dll 을 stdcall로 사용하니까 내부동작은 이상없었는데.. dll 메모리 해제시 에러가 나더라구요...
    그래서 인자가 있는 C++ Dll 사용시는 cdecl로 선언해서 Dll 사용후 메모리 해제시 정상으로 처리 되었습니다.

    경험에 의한 거구요...

    도움이 되었으면 좋겠습니다. 그럼, 즐프하세요....