2009-08-05 33 views
3

如果我有一个实现接口的对象,使用RTTI查找接口并获取其GUID并不难。但是如果我想要它的名字,有什么办法可以得到它吗?它很容易得到一个类的名称,但对于接口来说似乎有点棘手......如何在运行时获取接口的名称?

回答

1

棘手的部分是从一个接口获取RTTI。如果你已经设法做到这一点,那么你应该在PTypeInfo记录指针中有那个名字。

在我的一个程序中,我编写了一个特殊的注册系统,将GUID映射到字符串,以便我可以向QueryInterface报告失败的调用,并且失败的“as”强制转换。这是在德尔福2005年。我的理解是,在后来的德尔福版本接口的RTTI已经取得了进展,使我可能不再需要该系统。

+0

有RTTI,然后是RTTI。你可以从TObject.GetInterfaceTable获取一些信息,包括一个GUID,但是没有PTypeInfo ... – 2009-08-05 20:32:03

+0

啊。我通常不会将构建在VMT结构中的内容视为RTTI。除了术语外,您可能会被我提到的单独注册卡住。我稍后回家时会查看旧代码,如果当时还没有更好的答案。 – 2009-08-05 20:37:01

+0

我的理解是,接口的“名称”在代码中是可见的,但是当它们被编译时,名称被转换为Guid,以致信息有些丢失。你将不得不创建一个注册表,就像Rob建议将界面与字符串名称关联起来一样。尽管我从来没有尝试过这样做,但通过接口实现方法似乎是可能的(请参阅IntfInfo.pas)。 – skamradt 2009-08-05 21:03:58

相关问题