2011-12-02 3 views
1

다른 데이터 유형 RTTI 함유 TTypeData 필드 동적 배열을위한 세 가지 요소 유형 값을 갖는다 :동적 배열에 대한 TypeData의 다른 요소 유형 항목은 무엇을합니까?

elType: PPTypeInfo;  // nil if type does not require cleanup 
elType2: PPTypeInfo;  // independent of cleanup 
DynArrElType: PPTypeInfo; // actual element type, even if dynamic array 

elType의 목적은 매우 명백하다 : 그것은 를 RTL에 FinalizeArray에서 사용하고 남은 마무리 할 것이 없다면. 하지만 다른 두 요소, elType2DynArrElType이 있습니다. 왜 두 사람이 있고 두 사람의 차이점이 무엇인지 아는 사람이 있습니까? 내가 과거에 사용하는 단 하나이기 때문에

+2

난 그냥 확인하고'DynArrElType : PPTypeInfo,'필드가 델파이 XE 및 XE2에 주석 나타납니다, 그리고 델파이 7과 같은 이전 버전에서 - 2007도 표시되지 않습니다. 델파이의 어떤 버전을 사용하고 있습니까? – RRUZ

+1

TypInfo.pas는 주석 정의를 사용하여 레코드 정의에서 정적으로 선언 할 수없는 가변 길이 데이터를 설명합니다. 새로운 버전에서는 주석이 달렸지 만 이전 버전에서는 그렇지 않다는 사실은 새로운 버전의 새로운 데이터라는 것을 의미합니다. –

+1

@ RemyLebeau-TeamB는 그것을 알고있는 것이 좋지만 메이슨 (Mason)의 질문에서 필드는 주석으로 표시되지 않으므로 혼동을 야기 할 수 있습니다. – RRUZ

답변

2

만 해당 필드는 배열의 요소의 형태를 유지하고, 질문에 대한 elType2에 응답 할 수 있습니다. 이 샘플

{$APPTYPE CONSOLE} 

uses 
    TypInfo, 
    SysUtils; 

type 
TDateArray = array of TDateTime; 
Var 
    p  : PPTypeInfo; 
begin 
    try 
    p:=TypInfo.GetTypeData(TypeInfo(TDateArray)).elType2; 
    Writeln(TypInfo.GetTypeName(p^)); 
    except 
    on E: Exception do 
     Writeln(E.ClassName, ': ', E.Message); 
    end; 
    Readln; 
end. 

이것은 TDateArray 형 요소의 유형을 TDateTime으로, 반환을 확인.

BTW의 DynArrElType 필드는 지금까지 DynUnitName: ShortStringBase

+0

주석에 따라,'DynArrElType'은'elType2'가 아닌 엘레멘트 타입 정보를 포함 할 것으로 기대했을 것입니다. 또한 XE2의 TypInfo.pas에 따르면'DynUnitName'이있는 경우에도 DynArraElType은 여전히 ​​존재합니다. –

+0

BTW에서'DynUnitName'은 적어도 D6 이후로 존재했으며, 항상'elType2' 다음에 항상 따라 왔습니다. –

+0

예. 질문에 관련이 없기 때문에 몇 가지 요소를 생략했습니다. –

0

에 의해 델파이의 마지막 버전으로 대체 내가 말할 수있는, elType2DynArrElType 아무것도의 RTL에 의해 사용되지 않습니다. 컴파일러는 문서 생성기 등을 위해 여분의 메타 데이터로서 그 값을 방출 할 수 있습니다.