Q&A

  • Dynamic Array 에서....
외부함수에서 Setlength를 할려고 합니다.

제가 기존에 알고 있는 사항은
type
sArrayInteger = array of integer;
pArrayInteger = ^sArrayInteger;

...
procedure 외부함수(pA : pArrayInteger);
begin
  Setlenth(pA, 100);
end;
procedure 본함수;
var A : sArrayInteger;
begin
  외부함수(@A);
end;

이와같이 하면 됩니다.

그러나
type
sStrunct = recprd
  NM : array of string[100];
  value : array of double;
end;

이런식으로 스트럭쳐안의 Dynamic Array는 어떤 방식으로

외부에서 Setlength 할수 있을까요..

쩝.. 그럼 이만 즐코하세요
7  COMMENTS
  • Profile
    최용일 2003.10.30 01:31
    안녕하세요. 최용일입니다.

    똑같이 하시면 되는데...

    var
        A: sStrunct;
    begin
        외부함수(@A.NM);
    end;

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

  • Profile
    이중철 2003.10.30 01:40
    구조체 안의 변수들이 십여개 있고

    그와 같은 구조체의 변수 3개 정도를 외부함수에 콜해야 하는데

    그럴경우 아래와 같은 방법으로 쓰면 함수가 넘 지저분 해져서

    Procedure( @A.A, .... @A.E, @B.A.......B.G, @C.A.....C.H)

    이런식일텐데 이런면 정말 못써요

    쓰지를 못해요 차라리 TList로 전환해서 쓰는게 좋을 듯하네요

    아래의 방법은 저도 알고 있으나 그러지 못하는 상태입니다.

    변수만 40~50개 있는 함수를 선언하는 그런 사태는 좀 괴롭습니다.

  • Profile
    최용일 2003.10.30 01:50
    안녕하세요. 최용일입니다...

    첨했던 질문하고는 아무런 상관이 없는 내용이군요...

    그냥 구조체를 통째로 넘겨주시면 안되나요?

    procedure 외부함수(var pS: sStrunct);
    begin
        Setlenth(pS.NIM, 100);
        Setlenth(pS.Value, 100);
    end;

    procedure 본함수;
    var S: sStrunct;
    begin
        외부함수(S);
    end;

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

  • Profile
    이중철 2003.10.30 02:14
  • Profile
    이중철 2003.10.30 02:06
    그와같이 쓰면 error 날때도 있고 안날때도 있어요

    함수안에서 SetLength를 하면

    알고 계시겠지만 Getmem을 하잖아요

    함수에서 빠져 나올때 Freemem을 하지 않나요.

    본함수에 변수가 정의되어 있는데

    원래는 변수가 Relese될때 Freemem이 되는것으로 알고 있는데

    외부함수에서 아래와 같은 방법으로 하면

    에러가 납니다.

    그럼 답변 감사하고요 즐코하세요

    type

      AAAA = record
        A : array of string[100];
        B : array of integer;
        C : array of double;
        F : array of double;
      end;
      TForm1 = class(TForm)
        BitBtn1: TBitBtn;
        procedure BitBtn1Click(Sender: TObject);
      private
        { Private declarations }
      public
        { Public declarations }
        procedure ExternalFunction( A : AAAA);
      end;

    var
      Form1: TForm1;

    implementation

    {$R *.dfm}
    procedure TForm1.ExternalFunction( A : AAAA);
    begin
    Setlength(A.A, 100);
    Setlength(A.B, 100);
    Setlength(A.C, 100);
    Setlength(A.F, 100);
    A.A[1] := '야호';
    end;
    procedure TForm1.BitBtn1Click(Sender: TObject);
    var A : AAAA;
    begin
       ExternalFunction(A);
       caption := A.A[1];
    end;




  • Profile
    최용일 2003.10.30 02:20
    안녕하세요. 최용일입니다.

    님과 같이 하면 당연히 그렇게 됩니다.

    함수 파라매터가 값에 의한 호출(Call by Value)방식으로 넘어가니까 안에서 설정한게 밖에 영향을 못미칩니다... 함수안에서는 이 파라매터의 복사본을 가지고 작업을 하니까요...

    제가 예로 든거 잘 살펴보세요... 파라매터 앞에 var붙어 있잖아요... 이건 참조에 의한 호출(Call By Reference)로 함수안에서 값을 바꾸면 함수밖에서도 변경된게 적용됩니다...

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

  • Profile
    이중철 2003.10.30 01:49