LoadPackage, UnLoadPackageを使用して動的にパッケージをロードし実行したいのですが、この場合パッケージ側とのインターフェースはどのようにとればいいのでしょうか?静的ロードの場合はUsesにパッケージ側のユニットを書けばプロパティなどを参照できますが、動的ロードの場合はUsesに書けないので参照することができません。
よろしくお願いします。
パッケージをロードした後、GetClass(クラス名)でクラスを取得すれば、そのクラスのプロパティを参照できるのでは?
GetClassでクラスの取得を試みましたが、
クラスが見つからない(nilが返る)と言われてしまいます。
そもそもロードしたパッケージにあるクラスを
使うにはCreateしてやらなければならないと思うのですが
どうすればいいのでしょうか?
ヘルプによればLoadPackage時にパッケージに含まれている
すべてのユニットの初期化ブロック(initialization)を呼び出す
とあります。ここにCreateを書けばいい?
以上、よろしくお願いします。
GetClassでクラスを取得するには
パッケージ内のユニットでクラスをストリームに登録しなければ
ならないようです。initializationでRegisterClassをまたfinalizationで
UnRegisterClassを実行したらGetClassで取得できました。
ただしGetClassの戻り値はTPersistentClass型なので本来の型に
キャストしなければ(asを使用)なりませんがキャスト先のクラス定義は
パッケージ側のユニットにあるので参照できません。
うーん困りました。
そのものズバリのサンプルがありました。(ただし英語)
http://www.mdata.gr/MDataNews/DeveloperTips/advanceddynamicpackages.htm
みなさん、ありがとうございました。
ツイート | ![]() |