Q&A

  • 함수에서 리턴값과 파라메타 문제 제발 해결좀 바랍니다.
안녕하세요
델파이 초짜임다.
제가 델파이로 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;
1  COMMENTS
  • Profile
    최용일 2002.06.27 19:16
    안녕하세요. 최용일입니다.

    함수밖에서 파라매터값을 받으시려면 참조에 의한 호출을 하셔야 합니다. C에서는 &를 쓰던가.. 암튼...

    그리고 파라매터 Buf가 PChar이던데 메모리를 할당하는 코드가 없네요...

    function TForm1.test1(var buff:pchar; var buffsize:integer):integer;

    ^^ 항상 즐코하세요...

    • 안두식
    • 2002.06.27 20:21
    • 2 COMMENTS
    • /
    • 0 LIKES
    • 강재규
      2002.06.27 20:33
      저도 초보거등요... 도움이 되었으면 합니다... from에서 Properties에 보시면 Position의 속성을 poDes...
    • 블랙썬
      2002.06.27 20:39
      Form의 Properties에 보면 BorderIcons 라는 속성이 있습니다 여기서 최소화,최대화 등의 아이콘을 없...
    • 최용일
      2002.06.27 22:08
      안녕하세요. 최용일입니다. Project/Add to Project...메뉴를 선택해서 기본적인 함수기능이 있는 해당...
    • 델파이사랑
      2002.06.28 18:15
      감사합니다( 냉무)
    • 이재진
    • 2002.06.27 19:29
    • 1 COMMENTS
    • /
    • 0 LIKES
    • 머슴
      2002.06.28 02:33
      도움이 될런지 모르지만... 차라리 휠마우스를 먹게하면 되지 않을까요... Delphi Tips에서 ...
    • 백지연
    • 2002.06.27 19:16
    • 1 COMMENTS
    • /
    • 0 LIKES
    • 장태원
      2002.06.29 03:08
      리포트의 경로는 실행화일이 있는 subdirectory 로 하시는게 좋을듯 합니다. 예를 들어. 실행화일...
    • 강기철
      2002.06.27 19:46
      감사드립니다. 일이 빨라 질것 같네요. 좋은 날 되시길 바랍니다.^^
    • 염상철
      2002.06.27 19:18
      insert into table_4 (select * from TABLE_1 where A=3 union all select * from TABLE_2 where A=3 ...
    • 김수경
      2002.06.27 19:17
      TABLE_1, TABLE_2, TABLE_3을 JOIN명령을 이용해서 Query하신후 TABLE_4에 INSERT명령을 사용해서 ...
    • 이재봉
      2002.06.27 18:51
      begin ~ end 부분이 빠졌네요. 이걸로 함 해보세요. procedure TForm1.ComboBox1DrawItem(Control: TWin...
    • 머슴
      2002.06.27 18:45
      procedure TForm1.ComboBox1DrawItem(Control: TWinControl; Index: Integer;   Rect: TRect; S...
    • 김도형
    • 2002.06.27 17:57
    • 1 COMMENTS
    • /
    • 0 LIKES
    • KDDG_ZZOM
      2002.06.27 18:15
      combobox1.ItemIndex := 1;
    • 모범생
    • 2002.06.27 10:20
    • 2 COMMENTS
    • /
    • 0 LIKES
    • 박상윤
      2002.06.29 13:09
      Msdn을 보시면 Avi를 입출력하고 편집가능한 함수들이 있을 것입니다. 아마도 압축안된 Avi만 가능한것으...
    • 최용일
      2002.06.27 19:19
      안녕하세요. 최용일입니다. 그렇게 특화된 함수는 없을겁니다. 그냥 파일입출력함수를 쓰셔서 하셔야 될...
    • 정성훈
      2002.06.27 22:16
      안녕하세요 저도 비슷한 에러메시지였었는데 참고하세요.. 메뉴중에 Project==>Option 가시면 패키지 ...
    • 궁금이
    • 2002.06.27 08:36
    • 1 COMMENTS
    • /
    • 0 LIKES
    • 최용일
      2002.06.27 19:16
      안녕하세요. 최용일입니다. 함수밖에서 파라매터값을 받으시려면 참조에 의한 호출을 하셔야 합니다. C...
    • 이호성
    • 2002.06.27 06:46
    • 1 COMMENTS
    • /
    • 0 LIKES
    • 최용일
      2002.06.27 22:05
      안녕하세요. 최용일입니다. BltTBitmapAsDib란 함수 테스트 해보았는데 잘 작동하던데요. 인터넷에서 많...
    • 하종옥
    • 2002.06.27 05:53
    • 1 COMMENTS
    • /
    • 0 LIKES
    • 이추형
      2002.06.29 21:43
      가장 많이 나타나는 것중의 하나가 오라클 유저가 다른경우가 아닐까 합니다.
    • Malchus.Lee
    • 2002.06.27 05:04
    • 1 COMMENTS
    • /
    • 0 LIKES
    • 이선경
      2002.06.27 22:31
      옛날 경험으로는 파라독스가 원래 그래요 ...
    • 호야
      2002.06.27 05:35
      이상없이 잘되는데... ㅡㅡ;; 한가지 이상한게 있따면... Get_ProgramPath 프로시져가 실행시키는 파...
    • 한만교
    • 2002.06.27 03:51
    • 2 COMMENTS
    • /
    • 0 LIKES
    • 최용일
      2002.06.27 04:27
      안녕하세요. 최용일입니다. brcc32.exe는 리소스컴파일러입니다. dcc32.exe가 커맨드라인컴파일러입...
    • 한만교
      2002.06.27 10:28
      drcc32.exe aaa_pro.dpr > aaa_pro.exe 이렇게 하는군여... 감사합니다
    • 하기
      2002.06.27 03:45
      ExtractFilePath(Application.ExeName); 맞나?? ^^;
    • 염상철
      2002.06.27 03:15
      copy(combobox.text,1,3) 일케 하면 코드만..뽑아 낼수 잇지 않을까여~?
    • 세미콜론
      2002.06.27 03:30
      답변 감사드리구요~ 네! 그렇게 뽑아낸 코드를 다시 그콤보에 그값을 넣었을때(코딩으루) combbox.text :...
    • 정종필
      2002.06.27 09:12
      ComboBox.ItemIndex := ComboBox.Items.IndexOf('001 홍길수'); 이렇게 하면 ComboBox 의 ItemIndex 를 해...
    • 이종택
    • 2002.06.27 02:54
    • 2 COMMENTS
    • /
    • 0 LIKES
    • 염상철
      2002.06.27 03:29
      program filescommand bolrandbde 맞나여~? 여기를 걍...del루 완전히 삭제 하구.. bde를 다시 깔면 될...
    • 하기
      2002.06.27 03:04
      아마 삭제가 안되는 이유는 Alias(데이타베이스)가 Open이 되어 있는 상태인것 같은 생각이 드는군요... ...
    • 최용일
      2002.06.27 04:29
      안녕하세요. 최용일입니다. OwnerDraw로 직접 체크박스를 그려야 될거같은데요... 쫌 많이 작업이 필요...
    • 초보
    • 2002.06.27 02:26
    • 1 COMMENTS
    • /
    • 0 LIKES
    • 하얀까마귀
      2002.06.27 02:49
      안녕하세요 하얀까마귀 입니다. 어떤 이미지 처리를 하실껀지 알아야 되구요.. 제 경우에는 그걸. 그...