델파이 6.0에서 비주얼 c++ 6.0의 dll을 콜하여 원하는 데이타를 리턴받을 려고 합니다.
그런데 좀 이해가 안되는 부분이 있고 에러가 발생하여 문의 드립니다.
디버깅 결과 dll 함수의 //1),//2)번 부분까지는 데이타가 정상입니다. 원하는 데이타가 들어옵니다.
그런데 함수를 빠져 나가면서 //4)번에서 access 에러가 발생합니다. 물론 Rerurn_Getdata도 call by reference를 이용했으나 데이타
를 못받았습니다. Rerurn_Getdata 앞에 var를 붙여도 마찬가지 입니다. 어떤 분은 pchar를 넘길때는 call by reference라고 해도
var를 붙으면 안된다고도 하던데요 암튼 안되었습니다. 선언부에서 pchar대신 pointer를 써도 마찬가지 였구요.
dll부분의 aaa부분의 데이타양이 무지하게 많아서 전체를 call by reference로 하나의 거대한 스트링처럼 통으로 받아서
메모장에 한방에 쫙 뿌릴려고 하는 것이 목적입니다.
dll 함수부분의 ResultData가 포인터값을 전달해서 Rerurn_Getdata포인터값으로 접근할려고 할려고 했는데 아무래도
제가 잘못했기 때문에 문제가 있는게 아닌가 싶습니다.
무슨 방법이 없겠습니까. 좀 자세히 말씀해 주시면(예제까지 조금 해 주시면) 정말 정말 고맙겠습니다.
델파이 부분 변수 선언
PRerurn_Getdata1 pchar;
델파이 선언부
function TTTMsg(arraychar : array of char;datalen : integer ; Rerurn_Getdata : pchar) : integer ; stdcall ; external TTTDLLPOS;
호출하는 부분
procedure TFmRRCCall.Button1Click(Sender: TObject);
var teststr:string;
begin
if TTTMsg(Inputdata,123 ,) = 1 then
begin
teststr:=string(PRerurn_Getdata1);
DecordingInfo.Lines.Add(teststr);
end;
end; //4)
vc++ 부분 dll
구현부
extern "C" int FAR PASCAL EXPORT TTTMsg(unsigned char inputdata[],int LengthData, char *ResultData))
{
char* AAA= BBB; //1)
ResultData=AAA; //2)
//memcpy (ResultData, AAA, sizeof(AAA));//3)
return 1;
}
델파이 선언부의 arraychar파라매터는 동적배열로 델파이에만 존재하는 자료형입니다.
PChar나 포인터, 정적배열로 선언해서 쓰세요...
메모리도 델파이에서 할당한뒤에 DLL 함수를 호출하세요.