3
  ShowMessage(TRttiContext.Create.GetType(TStringList)
    .GetProperty('Strings').ToString);

上記のコードは、.GetPropertyが "Strings"、 "Objects"、 "Values"(インデクサーを含むもの)などのプロパティでnilを返すため失敗します。これは既知の制限であり、問​​題は、これらのインデックス付きプロパティにアクセスする方法があるかどうかです(できれば、古いRTTIユーティリティにフォールバックすることなく)。

4

2 に答える 2

2

インデックス付きプロパティには RTTI がありませんが、基になるフィールドにはあります。したがって、RTTI を介して直接 TStringList.FList にアクセスできます。ただし、これには生のポインターが含まれるため、Count プロパティを超えないように注意してください。他のクラスでも同様のことができます。

于 2009-11-06T04:30:32.530 に答える
1

RTTI にギャップがあります。インデックス付きプロパティは 1 つです。

しかし、プロパティ名がわからないのに、なぜそれらにアクセスしようとするのでしょうか? ;-) そのようなプロパティがあることがわかっている場合は、代わりにキャストを試すことができます。

typ のメソッド パラメーターの RTTI を取得しません。

procedure MyProc(const AParam: array of AType)

また。

RTTIを取得できなかった要素をもっと知っている人はいますか?

于 2009-11-06T08:53:57.133 に答える