3
인터페이스를 구현하는 객체가있는 경우 RTTI를 사용하여 인터페이스를 검색하고 해당 GUID를 얻는 것이 그리 어렵지 않습니다. 그러나 내가 그 이름을 원한다면, 그것을 얻을 수있는 방법이 있습니까? 클래스 이름을 얻는 것은 간단하지만 인터페이스는 조금 까다 롭습니다 ...런타임시 인터페이스 이름을 얻는 방법은 무엇입니까?
인터페이스를 구현하는 객체가있는 경우 RTTI를 사용하여 인터페이스를 검색하고 해당 GUID를 얻는 것이 그리 어렵지 않습니다. 그러나 내가 그 이름을 원한다면, 그것을 얻을 수있는 방법이 있습니까? 클래스 이름을 얻는 것은 간단하지만 인터페이스는 조금 까다 롭습니다 ...런타임시 인터페이스 이름을 얻는 방법은 무엇입니까?
까다로운 부분은 인터페이스에서 RTTI를 얻는 것입니다. 그 일을 처리했다면, 이미 PTypeInfo
레코드 포인터에 그 이름이 있어야합니다.
내 프로그램 중 하나에서 GUID를 문자열에 매핑하는 특수 등록 시스템을 작성하여 실패한 호출을 QueryInterface
에보고하고 "as
"캐스트가 실패했습니다. 델파이 버전에서 인터페이스에 대한 RTTI가 진행되어 더 이상 그 시스템이 필요하지 않을 수도 있다는 것을 이해했습니다.
RTTI가 있고 RTTI가 있습니다. GUID를 포함하여 TObject.GetInterfaceTable에서 일부 정보를 얻을 수 있지만 PTypeInfo는 없습니다. –
Ah. 나는 일반적으로 VMT 구조에 내장 된 것들을 RTTI로 생각하지 않습니다. 용어를 제쳐두어 서, 내가 언급 한 별도의 등록을 할 수 있습니다. 나중에 집에 돌아 왔을 때 이미 오래된 코드를 체크 아웃 할 것입니다. –
인터페이스의 "이름"은 코드에서 볼 수 있지만, 컴파일되면 이름이 Guids로 변환되므로 정보가 다소 손실됩니다. Rob이 인터페이스를 문자열 이름과 연관시키기 위해 제안한 것과 매우 유사한 레지스트리를 만들어야합니다. 필자는 한번도 시도한 적이 없지만 인터페이스로 구현 된 메소드를 가져 오는 것은 가능합니다 (IntfInfo.pas 참조). – skamradt