A.pas라는 곳에서,,,,
전역변수로 배열을 선언하여 사용을 했습니다.
type
THistorical := array of array of String;
TItemValue := Array of Array of Array of String;
var
Historical : THistorical;
ItemValue : TItemValue;
이런식의 다차원 배열을,,,,
B.pas라는 곳에서
위의 배열을 사용하기 위해서 불렀습니다.
public
FHistorical : THistorical;
FItemValue : TItemValue;
그리고 사용을 했습니다...
J := Length(FItemValue);
문제는 A.pas에서 배열에 저장했던 값을 그대로 불러다 쓰려고 합니다.
그런데,,, 위의 처럼 했더니,, B.pas에서는 배열에 저장했던 값들이 사라지더 군요,,,
ㅠㅠ
A.pas에서 저장했던 값들이 계속 남아있게 하는 방법 좀 알려주세요
자세히좀,,,
syntax 문제를 물어보시는 것 같습니다.
[A] 영역에서 변수type을 선언하고 변수를 선언한 것은
그 변수영역이 [A]에서 선언을 했기 때문으로..
interface 혹은 uses 문에 사용할때에는 따로 따로 선언한 것으로 간주하게 될 것입니다.
따라서, [A]의 변수를 사용하시기 위해서는 [B]에서 [A]의 변수와 똑같은 이름으로 변수를
선언하시지 마시고 [A]변수를 사용하시면 되겠습니다.
즉
[A]에는 type 및 변수 선언
[B]에서는 [A]에서 사용한 변수에 Memory를 할당(실제 배열 크기설정)하고
사용하시면 되겠습니다.
님께서 느끼셨던 문제는 지역변수와 전역변수의 차이점과 같은 문제점으로
똑같은 변수Type의 똑같은 이름이 존재할 때에는
①지역변수 ②해당PAS의 변수 ③전역변수 순서로 그 변수를 사용하게 됩니다.
실제로 테스트를 했더니.. 잘되는군요..
단,
[A]의 pas는 [B]의 uses절에 추가를 하셔야만 합니다.
uses은 interface의 uses절 혹은 implementation의 uses 어디든 상관없겠습니다.
이렇게 사용하실려는 것 보니
변수Type을 일괄적으로 한개의 Source에서 관리하시려나 보네요.. *^^*
좋은 습관이신 것 같습니다.
답변이 되셨길 바랍니다.