문제

먼저, 내 영어에 대해 사과드립니다. 여기에 내가 쓴 내용이 이해되기를 바랍니다. 이제 내 문제에.

내용의 문자열 표현을 어떻게 얻을 수 있습니까? 유형 typinfo.getenumname ()을 사용하는 변형의. 나는 운이 없으면 숫자 표현을 얻었습니다.

myString := GetEnumName( TypeInfo(TVarType), TVarData(myVar).VType );

고맙습니다.

도움이 되었습니까?

해결책

변형 유형의 문자열 표현을 얻으려면 빌드 인 델파이 함수를 사용하십시오.

var
  MyVariantType: string;
  MyVariant: Variant;
begin
  MyVariant := 'Hello World';
  MyVariantType := VarTypeAsText(VarType(MyVariant));
  ShowMessage(MyVariantType); //displays: String

  MyVariant := 2;
  MyVariantType := VarTypeAsText(VarType(MyVariant));
  ShowMessage(MyVariantType); //displays: Byte
end;

다른 팁

Delphi 2007의 인용 도움말 :

getenumname을 사용하여 델파이 열거 된 값을 코드에서 나타내는 기호 이름으로 변환하십시오.

그것은 당신이 그 목적으로 그것을 사용할 수 없다는 것을 의미합니다. tvardata.vtype 열거 된 값이 아니라 System의 상수 중 하나로 설정된 정수입니다. wtypes.h 파일. 소스를보십시오 getenumname (), 정수의 값이 포함 된 문자열을 즉시 반환합니다.

편집하다:

tvardata.vtype의 문자열 표현을 얻는 다른 방법이 있습니까?

문자열 표현을 수동으로 결정할 수 있습니다. 먼저 해당 정수에 몇 가지 정보가 인코딩되어 있으므로 간단한 사례 문 또는 배열 조회가 작동하지 않습니다. 더 낮은 12 비트는 타입 마스크이며, 상단 비트는 벡터 또는 어레이 유형인지, 참조로 제공되는지 여부에 대한 정보를 인코딩합니다. 중요한 부분은 다음과 같습니다.

const
  varTypeMask = $0FFF;
  varArray    = $2000;
  varByRef    = $4000;

그래서 당신은 다음과 같은 일을 할 수 있습니다.

function VariantTypeName(const AValue: TVarData): string;
begin
  case AValue.VType and varTypeMask of
    vtInteger: Result := 'integer';
    // ...
  end;

  if AValue.VType and varArray <> 0 then
    Result := 'array of ' + Result;
  if AValue.VType and varByRef <> 0 then
    Result := Result + ' by ref';
end;

열거가 아니기 때문에 수동으로해야합니다. 다음과 같이 작성하십시오.

function VariantTypeName(const value: TVarData): string;
begin
  case value.VType of
    vtInteger: result := 'integer';
    //and so on
end;

또는 System.PAS의 값이 순서대로 나열되므로 정식 배열을 선언하고 VariantTypename 함수가 배열의 적절한 멤버를 반환하도록하십시오.

VartyPeastext를 지원하지 않는 Delphi 버전에 대한 생각은 다음과 같습니다. vtype 값을 따르는 열거 형 유형을 정의 할 수 있습니다.

type
  {$TYPEINFO ON}
  TMyVarType = (
    varEmpty = System.varEmpty, 
    varNull = System.varNull,
    // etc...
    );

(사용하지 않은 열거 슬롯도 채우십시오. 참조하십시오 열거 유형에 따라 "유형이 typeinfo가 없음"오류가 발생하는 이유 이에 대한 추론을 위해).

다음 으로이 기능을 사용하여 자신의 열거 형식으로 변형의 유형을 읽으십시오.

function MyVarType(VType: TVarType): TMyVarType; overload;
begin
  Result := TMyVarType(VType);
end;

function MyVarType(V: Variant): TMyVarType; overload;
begin
  Result := TMyVarType(TVarData(V).VType);
end;

그런 다음 다음과 같은 문자열로 변환 할 수 있습니다.

function VarTypeToString(aValue: TMyVarType): string;
begin
  Result := GetEnumName(TypeInfo(TMyVarType), Ord(aValue));
end;
라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top