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 쪽에선 아무런 문제가 없음이
확인되었습니다.
아무래도 선언 쪽에 문제가 있는 것 같기도 하구...
도와주세요...
stdcall 이 아닌 cdecl로 하세요. 저 이것 때문에 무지하게 고생했었습니다.
인자가 있는 C++로 만든 dll 을 stdcall로 사용하니까 내부동작은 이상없었는데.. dll 메모리 해제시 에러가 나더라구요...
그래서 인자가 있는 C++ Dll 사용시는 cdecl로 선언해서 Dll 사용후 메모리 해제시 정상으로 처리 되었습니다.
경험에 의한 거구요...
도움이 되었으면 좋겠습니다. 그럼, 즐프하세요....