LoadPackageの呼び出しが初期化されますが、registerClassは動作しません。
質問
Iは単位WICHがTBLAを定義しており、初期化セクションに以下のコード:
initialization
RegisterClass(TBla);
showMessage('registered');
このユニットは、パッケージの内側にあります。 OKます。
ボタンで私のアプリをクリックして、私は次のコードを持っています:
LoadPackage('C:\temp\testes_packs\pack1\Package1.bpl');
pc := GetClass('TBla');
if pc = nil then
ShowMessage('didnt work');
私はボタンをクリックすると、「登録」というメッセージが表示されます。しかし、「didntの仕事は」あまりにも示しています。これは何らかの理由という初期化WASSが、レジスタクラスが機能しなかったことを示しています。
[OK]を、LoadPackageが問題だったことを証明するために、私は直接私のプロジェクトに(つまり、TBLAクラスが含まれています)私のユニットを含み、loadPackageラインと、多田「登録」というメッセージが表示され、はgetClassが機能を削除しました。
任意のアイデア?
解決
あなたのパッケージには、その「必要です」リストで「RTL」と「VCL」を含める必要があります。そのように、クラス登録リストは、共有パッケージに1つ、独自のパッケージにプライベートではないでしょう。
また、あなたのアプリケーションは、実行時パッケージを使用するようにコンパイルする必要があります。具体的には、「RTL」と「VCL」のパッケージは、実行時パッケージのリストにする必要があります。
はそれらのものの両方を行わず、一つのモジュールで使用されるクラス・登録リストは、他のモジュールで使用されるリストと同じにはなりません。これらは両方とも同じものを使用する必要があり、それを行う方法は、両方のモジュールがRTLによって公開されたリストを共有していることを確認することです。
所属していません StackOverflow