パッケージを動的ロードするには?

解決


DreamSeeker  2006-02-14 17:01:19  No: 20018  IP: 192.*.*.*

LoadPackage, UnLoadPackageを使用して動的にパッケージをロードし実行したいのですが、この場合パッケージ側とのインターフェースはどのようにとればいいのでしょうか?静的ロードの場合はUsesにパッケージ側のユニットを書けばプロパティなどを参照できますが、動的ロードの場合はUsesに書けないので参照することができません。
よろしくお願いします。

編集 削除
夢追い人  2006-02-14 22:54:29  No: 20019  IP: 192.*.*.*

パッケージをロードした後、GetClass(クラス名)でクラスを取得すれば、そのクラスのプロパティを参照できるのでは?

編集 削除
DreamSeeker  2006-02-15 15:48:54  No: 20020  IP: 192.*.*.*

GetClassでクラスの取得を試みましたが、
クラスが見つからない(nilが返る)と言われてしまいます。
そもそもロードしたパッケージにあるクラスを
使うにはCreateしてやらなければならないと思うのですが
どうすればいいのでしょうか?
ヘルプによればLoadPackage時にパッケージに含まれている
すべてのユニットの初期化ブロック(initialization)を呼び出す
とあります。ここにCreateを書けばいい?
以上、よろしくお願いします。

編集 削除
DreamSeeker  2006-02-16 18:00:53  No: 20021  IP: 192.*.*.*

GetClassでクラスを取得するには
パッケージ内のユニットでクラスをストリームに登録しなければ 
ならないようです。initializationでRegisterClassをまたfinalizationで 
UnRegisterClassを実行したらGetClassで取得できました。
ただしGetClassの戻り値はTPersistentClass型なので本来の型に 
キャストしなければ(asを使用)なりませんがキャスト先のクラス定義は 
パッケージ側のユニットにあるので参照できません。 
うーん困りました。

編集 削除
DreamSeeker  2006-02-21 13:49:17  No: 20022  IP: 192.*.*.*

そのものズバリのサンプルがありました。(ただし英語)

http://www.mdata.gr/MDataNews/DeveloperTips/advanceddynamicpackages.htm

みなさん、ありがとうございました。

編集 削除