2

Delphi でオブジェクトを XML に解析しようとしているので、オブジェクトの ClassInfo メソッドを呼び出してその RTTI 情報を取得する方法について読みました。

問題は、これは明らかに TPersistent オブジェクトに対してのみ機能するということです。それ以外の場合は、コンパイラが RTTI 情報を生成するように、コンパイラ ディレクティブ {$M+} をソース コードに明示的に追加する必要があります。

そのため、喜んでディレクティブを追加しましたが、ClassInfo 呼び出しから何かが返されたとしても (以前は nil が返されていました)、クラスのプロパティ、フィールド、またはメソッドを取得できなくなりました。オブジェクトを空にして作成したようなものです。

ここで何が欠けているのですか?ありがとう!

4

4 に答える 4

7

それらのプロパティとメソッドをpublishedセクションに入れましたか?

それに加えて、「古典的な」RTTI ($TYPEINFO ON) は、メソッドではなく、プロパティに関する情報のみを取得します。それらには「拡張」RTTI ($METHODINFO ON) が必要です。

拡張 RTTI の良い出発点: 拡張 RTTIに関する David Glassborow

(たった今、私が拡張 RTTI を使用するコードを書き終えて、スタック オーバーフローを少し参照することにしたと誰が信じているでしょうか :))

于 2008-10-03T19:25:03.453 に答える
3

RTTI は、公開されたプロパティなどのみを表示します。- 公共のものだけではありません。

コードを TObject で試してみて、何が起こるか見てみましょう。うまくいかない場合は、コードを投稿してください

于 2008-10-03T19:22:43.660 に答える
3

TXMLDocument コンポーネントの使用を検討しましたか? XML を調べてから、XML ファイルを表す Delphi クラスの優れたユニットを作成します。これにより、XML ファイルの読み書きが非常に簡単になります。

于 2008-10-04T05:27:48.540 に答える