0

EnumResourceNames API 呼び出しを介してアプリケーション リソースから DFM 情報を読み取るローカリゼーション アプリケーションを作成しています。

ただし、この関数は、DFM が関連付けられているフォームの名前を返します。FindClass からクラスを取得しようとしましたが、この操作全体がパッケージでコーディングされているため、FindClass は失敗します。RegisterClass ルーチンは、exe の初期化セクションから呼び出されます。

FindClass は、exe プロジェクトに記述されたコード内から呼び出すと正常に動作します。そのため、すべてのフォーム クラスを追加する独自の登録フレームワークを開発しましたが、フォームのユニットを追加してフォーム クラスを RegisterClass ルーチンに渡す必要があるため、これは非常に面倒です。

クラス名を検索してオブジェクトのインスタンスを作成できる実行可能ファイルにあるすべてのクラスを取得する簡単なソリューションを誰かが提供できるかどうかを期待していました。

ところで、私は Delphi 6 Update 2 を使用しています。

ありがとうラフルW

4

1 に答える 1

2

アプリケーションが呼び出しRegisterClass()ていて、パッケージが呼び出している場合FindClass()(またはその逆)、パッケージとアプリケーションの両方がランタイムパッケージを有効にしてコンパイルされている場合にのみ機能するため、RTLの単一インスタンスを共有します(つまり、アプリケーションおよびパッケージと一緒のRTLおよびVCLパッケージ)。それ以外の場合、アプリケーションとパッケージには、代わりにRTLの独自のローカルコピーがあります。そのような状況でクラスを共有するには、一方のプロジェクトが、もう一方のプロジェクトのローカルクラスリストにローカルクラスを登録する必要があるときに、もう一方のプロジェクトが呼び出すことができる追加の関数をエクスポートする必要があります。

利用可能なクラスを動的に検出することに関しては、それはD6では不可能です。RTTIシステムは、D2010まで、その種の列挙を実行するのに十分な詳細情報を取得しませんでした。

于 2012-05-03T23:26:01.850 に答える