3
インターフェイスを実装するオブジェクトがある場合、インターフェイスをルックアップしてそのGUIDを取得するためにRTTIを使用することはあまり難しくありません。しかし、私がその名前を望むなら、それを得る方法はありますか?クラスの名前を取得するのは簡単ですが、インターフェイスの場合は少し面倒です。実行時にインタフェースの名前を取得する方法は?
インターフェイスを実装するオブジェクトがある場合、インターフェイスをルックアップしてそのGUIDを取得するためにRTTIを使用することはあまり難しくありません。しかし、私がその名前を望むなら、それを得る方法はありますか?クラスの名前を取得するのは簡単ですが、インターフェイスの場合は少し面倒です。実行時にインタフェースの名前を取得する方法は?
難しい部分はインターフェイスからRTTIを取得しています。あなたがそれを行うことができたら、PTypeInfo
レコードポインタの中にすでにその名前があるはずです。私のプログラムの一つで
は、私がQueryInterface
への呼び出しに失敗し、「as
」キャストに失敗したと報告できるように文字列にGUIDをマッピングされた特別な登録システムを書きました。それはDelphi 2005にありました。私の理解は、後のDelphiのバージョンでは、インタフェース用のRTTIが進んだので、もうそのシステムは必要ないかもしれないということです。
RTTIがあり、RTTIがあります。 GUIDを含むTObject.GetInterfaceTableからいくつかの情報を得ることができますが、そこにはPTypeInfoはありません。 –
Ah。私は、一般的にVMT構造体に組み込まれているものはRTTIであるとは考えていません。用語を別にすれば、あなたは私が言及した別々の登録に立ち往生するかもしれません。私は古いコードをチェックアウトします。私が後で家に帰るときには、すでに良い答えがないとチェックします。 –
インターフェイスの「名前」はコード内に表示されますが、コンパイルされると名前がGuidsに変換されるため、情報が多少失われます。あなたは、Robがインターフェースを文字列名と関連づけるために提案したのと同じように、レジストリを作成しなければなりません。私はこれを試みたことはありませんが、インタフェースによって実装されたメソッドを取得することは可能です(IntfInfo.pasを参照)。 – skamradt