안녕하세요
델파이 초짜임다.
제가 델파이로 dll을 만들었는데 c언어로 만든 프로그램에서 dll의 특정함수를 call하는
부분에서 말썽임다 ㅠ.ㅠ
제 의도는 아래의 테스트 프로그램으로 설명하자면 button1을 클릭했을때 test1함수를
콜해서 buff와 buffsize를 얻어와서(이것은 dll에서 얻어올려고 합니다) 이값을 tbuff와 tbuffsize에 담아서 이 함수를 call한 프로그램에서 사용할려고 하는데 안되네요
일단 함수 리턴값 1은 정상적으로 넘어옵니다.
디버깅을 해보니 tbuffsize는 0값이 넘어옵니다.
procedure TForm1.Button1Click(Sender: TObject);
var t,tbuffsize,i:integer;
tbuff:pchar;
totstr:string;
begin
totstr:='';
t:=test1(tbuff,tbuffsize); //이부분은 test1함수를 콜해서 buff와 buffsize의 값
//을 가져와서 여기서 그 값을 그 값을 사용하기 위해서
//리턴값 1은 정상적으로 넘어와서 변수 t에 저장됨
edit1.text:=inttostr(t);
for i:=0 to tbuffsize-1 do //디버깅 결과 tbuffsize의 값은 0이 옵니다.
begin
totstr:=totstr+tbuff[i]; //totstr이 'abcdefgh'이 되게하는 것이 최종목적임다.
//물론 tbuffsize도 제대로 된 값(8)을 가져야 하구요.
end;
end;
function TForm1.test1(buff:pchar;buffsize:integer):integer;
var str1:string;
intlen:integer;
begin
str1:='abcdefgh';
intlen:=length(str1);
strlcopy(buff,pchar(str1),intlen); //변수 스트링을 buff에 넣기 위해서
buffsize:=intlen; //이 부분은 아예 브레이크 포인트도 안잡히고 디버깅시 건
// 너뜁니다. buffsize의 값을 정해서(여기서는 abcdefgh의
// 사이즈 8) 이 함수를 호출한 함수의 tbuffsize 인수에 8을 전
//달할수는 없나요?
//디버깅 결과 tbuffsize은 0값만 항상 가집니다.ㅠ.ㅠ
result:=1; //이 리턴값은 정상적으로 전달됩니다.
end;
함수밖에서 파라매터값을 받으시려면 참조에 의한 호출을 하셔야 합니다. C에서는 &를 쓰던가.. 암튼...
그리고 파라매터 Buf가 PChar이던데 메모리를 할당하는 코드가 없네요...
function TForm1.test1(var buff:pchar; var buffsize:integer):integer;
^^ 항상 즐코하세요...