2009-08-05 8 views
3

인터페이스를 구현하는 객체가있는 경우 RTTI를 사용하여 인터페이스를 검색하고 해당 GUID를 얻는 것이 그리 어렵지 않습니다. 그러나 내가 그 이름을 원한다면, 그것을 얻을 수있는 방법이 있습니까? 클래스 이름을 얻는 것은 간단하지만 인터페이스는 조금 까다 롭습니다 ...런타임시 인터페이스 이름을 얻는 방법은 무엇입니까?

답변

1

까다로운 부분은 인터페이스에서 RTTI를 얻는 것입니다. 그 일을 처리했다면, 이미 PTypeInfo 레코드 포인터에 그 이름이 있어야합니다.

내 프로그램 중 하나에서 GUID를 문자열에 매핑하는 특수 등록 시스템을 작성하여 실패한 호출을 QueryInterface에보고하고 "as"캐스트가 실패했습니다. 델파이 버전에서 인터페이스에 대한 RTTI가 진행되어 더 이상 그 시스템이 필요하지 않을 수도 있다는 것을 이해했습니다.

+0

RTTI가 있고 RTTI가 있습니다. GUID를 포함하여 TObject.GetInterfaceTable에서 일부 정보를 얻을 수 있지만 PTypeInfo는 없습니다. –

+0

Ah. 나는 일반적으로 VMT 구조에 내장 된 것들을 RTTI로 생각하지 않습니다. 용어를 제쳐두어 서, 내가 언급 한 별도의 등록을 할 수 있습니다. 나중에 집에 돌아 왔을 때 이미 오래된 코드를 체크 아웃 할 것입니다. –

+0

인터페이스의 "이름"은 코드에서 볼 수 있지만, 컴파일되면 이름이 Guids로 변환되므로 정보가 다소 손실됩니다. Rob이 인터페이스를 문자열 이름과 연관시키기 위해 제안한 것과 매우 유사한 레지스트리를 만들어야합니다. 필자는 한번도 시도한 적이 없지만 인터페이스로 구현 된 메소드를 가져 오는 것은 가능합니다 (IntfInfo.pas 참조). – skamradt

관련 문제