TestコンポーネントのPub_Kansu()でDllを使用しています。
例)
Kansu() 'Hoge.dll';
公開関数は
Pub_Kansu()
begin
Kansu();
end
このコンポーネントは色々なアプリで使用されています。
アプリ1ではTest1.Pub_Kansu()と呼びだしているし、アプリ2ではTest2.Pub_Kansu()と呼びだしています。
このように共通に使用するのは特に問題があることではないですよね?
こんにちは,Mr.XRAYです.
>このように共通に使用するのは特に問題があることではないですよね?
DLL内の処理にもよりますから,特に問題が発生しなければいいのでは
ないかと思いますが...
「勝てば官軍,動けば正義」です.
失礼しました.
>DLL内の処理にもよりますから
DLL内の処理と,その中の関数類を使用するコードにもよりますから,
参考までに,
異なるプロセスで使用するには,一般的には,共有メモリ(メモリマップドファイル)
というものを実装します.
これは,違うプロセスで,変数類のアドレスに衝突が起きないようにするためです.
でも,「勝てば官軍,動けば正義」です.
Mr.XRAYさん
回答ありがとうございます。
> これは,違うプロセスで,変数類のアドレスに衝突が起きないようにする> ためです.
とありますが、すいません。ちとわからないです。
Test1.Pub_Kansu()とTest2.Pub_Kansu()では衝突はないですよね?
具体的な例などありましたらもう少し詳しく教えてください。
>とありますが、すいません。ちとわからないです。
分からなくてもいいんです(笑)
ともかく,今開発しているアプリが正常に動作しているならば,
>Test1.Pub_Kansu()とTest2.Pub_Kansu()では衝突はないですよね?
分かりません.私はるみさんの傍にいるわけでもなく,DLLや,アプリのコードを全く
知らないのですから.こんなこと訊かれても困ります.
>具体的な例などありましたらもう少し詳しく教えてください。
例えば,何にかしらのフックなどが相当するかも知れません.
他のアプリでDLL内の処理をしている間にも,別のアプリがフック動作をすれば,
同時に,DLL内の関数で処理を行う可能性があります.
世の中には,るみさんが開発しているアプリ以外の,いろいろな動作,仕様の
アプリがあり,それを開発している方もいるということです.
当たり前ですけどね.(^^;
Mr.XRAY、回答ありがとうございます。
ようするにDLL内でちゃんとした排他がされていれば問題なく使用できるけど排他がされていないと衝突は保障できないよってことですかね。
>ようするにDLL内でちゃんとした排他がされていれば
一般に,DLL内のグローバル変数は,排他的な処理です.
例えば,DLL内に A というグローバル変数があったとします.
このDLL内の変数Aに あるプログラムからセットします.
次に,他のプログラムが,同じくDLL内の変数Aに値をセットします.
同じ変数Aですが,これらは全く別の値になります(セットした値が違うのであれば).
つまり,DLL内のグローバル変数は,呼び出したプログラム専用の変数となります.
>DLL内のグローバル変数は,呼び出したプログラム専用の変数となります.
だからこそ,WindowsのいろいろなDLL内の関数を,どのプログラムからも利用可能となるわけです.
ツイート | ![]() |