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

解決


DreamSeeker  2006-02-15 02:01:19  No: 20018

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


夢追い人  2006-02-15 07:54:29  No: 20019

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


DreamSeeker  2006-02-16 00:48:54  No: 20020

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


DreamSeeker  2006-02-17 03:00:53  No: 20021

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


DreamSeeker  2006-02-21 22:49:17  No: 20022

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

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

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


※返信する前に利用規約をご確認ください。

※Google reCAPTCHA認証からCloudflare Turnstile認証へ変更しました。






  このエントリーをはてなブックマークに追加