掲示板システム
ホーム
アクセス解析
カテゴリ
ログアウト
外部PKG(BPL)のインターフェースを変更してもリコンパイルしない方法は? (ID:46877)
名前
ホームページ(ブログ、Twitterなど)のURL (省略可)
本文
もらみとなのいさん >変更の可能性がある部分はインターフェースに依存しないよう引数化してデータとして渡す等 ありがとうございます。設計の見直し…確かにその通りですね。 この件以外にも問題はあるので考えてみます。 下記のようなテスト用BPLを作成し、 参照元のEXEをコンパイル後に 「//*追加」の行を追加してテストをしてみました。 〜記〜 unit DM_sample; interface uses System.SysUtils, System.Classes; type TDataModule1 = class(TDataModule) procedure DataModuleCreate(Sender: TObject); private function gt_PUB_1():String; function gt_PUB_11():String; //*追加 function gt_PUB_2():String; public //①変数を直接外部から参照 →F_PUB_2を参照すると、F_PUB_11の値が返される F_PUB_1:String; F_PUB_11:String; //*追加 F_PUB_2:String; //②関数を外部から参照 →すべて正常な値が返される function Fnc_PUB_1():String; function Fnc_PUB_11():String; //*追加 function Fnc_PUB_2():String; //③プロパティ値の読み込みに変数を指定 →①と同様 Property Prp_PUB_1:String read F_PUB_1; Property Prp_PUB_11:String read F_PUB_11; //*追加 Property Prp_PUB_2:String read F_PUB_2; //④プロパティ値の読み込みに関数を指定 →すべて正常な値が返される Property Prp2_PUB_1:String read gt_PUB_1; Property Prp2_PUB_11:String read gt_PUB_11; //*追加 Property Prp2_PUB_2:String read gt_PUB_2; published //最下部に追加する分には問題なくプロパティ値が読み取れる private F_PUB_12:String; //*追加 private function Fn_PUB_12():String; //*追加 public Property P1_PUB_11:String read F_PUB_12; //*追加 end; 〜中略〜 function TDataModule1.gt_PUB_1():String; begin Result:= F_PUB_1; end; function TDataModule1.Fnc_PUB_1():String; begin Result:= F_PUB_1; end; 〜以下略〜 結果A.変数を直接参照①、プロパティ値の読み取り値に変数を指定した場合③は、不正な値が返されました。 結果B.変数の値を戻り値とする関数を参照②、プロパティ値の読み取り値に左記関数を指定した場合④は、正常な値が返されました。 結果C.各行の間に変数を追加せず、最下部に変数を追加した場合、その影響は無く、正常な値が返されました。 Aの方法を取りやめ、Bの方法に変更して、参照元のEXE(500本)をリコンパイルすれば、それ以降、変数を追加しても不都合は生じない…様なのですが、この方法を取った場合に起きうる問題は何かあるでしょうか
←解決時は質問者本人がここをチェックしてください。
戻る
掲示板システム
Copyright 2021 Takeshi Okamoto All Rights Reserved.