2009-08-05 65 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

相關問題