2009-03-31 5 views
7

Iは単位ウィッヒは、初期化セクションにTBLA、次のコードを定義してい動作しません。LoadPackageの呼び出しが初期化されますが、registerClassは

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の仕事」も示しています。これは、初期化が呼び出されたが、何らかの理由でレジスタクラスが機能しなかったことを示します。

[OK]をクリックすると、LoadPackageが問題であることを証明するために、自分のプロジェクト(TBlaクラスを含む)をプロジェクトに直接追加し、loadPackage行を削除しました。 '登録された'メッセージが表示され、getClassが機能します。

アイデア?

答えて

13

パッケージには、 "必須"リストに "rtl"と "vcl"を含める必要があります。そうすることで、クラス登録リストは共有パッケージ内のリストになり、自分のパッケージにはプライベートではありません。

また、実行時パッケージを使用するようにアプリケーションをコンパイルする必要があります。特に、 "rtl"パッケージと "vcl"パッケージは、ランタイムパッケージのリストにある必要があります。

これらの両方を行うことなく、あるモジュールで使用されるクラス登録リストは、他のモジュールで使用されるリストと同じではありません。どちらも同じものを使う必要があります。その方法は、両方のモジュールがRTLによって公開されているリストを共有していることを確認することです。

+0

が完璧です。ありがとう。 –

関連する問題