コンポーネントで使用しているDllに関して

解決


るみ  2012-04-17 20:49:15  No: 41972

TestコンポーネントのPub_Kansu()でDllを使用しています。
例)
Kansu() 'Hoge.dll';

公開関数は
Pub_Kansu()
begin
 Kansu();
end

このコンポーネントは色々なアプリで使用されています。
アプリ1ではTest1.Pub_Kansu()と呼びだしているし、アプリ2ではTest2.Pub_Kansu()と呼びだしています。

このように共通に使用するのは特に問題があることではないですよね?


Mr.XRAY  2012-04-17 21:41:37  No: 41973

こんにちは,Mr.XRAYです.

>このように共通に使用するのは特に問題があることではないですよね?

DLL内の処理にもよりますから,特に問題が発生しなければいいのでは
ないかと思いますが...
「勝てば官軍,動けば正義」です.


Mr.XRAY  2012-04-17 21:45:59  No: 41974

失礼しました.

>DLL内の処理にもよりますから

DLL内の処理と,その中の関数類を使用するコードにもよりますから,


Mr.XRAY  2012-04-17 22:00:03  No: 41975

参考までに,
異なるプロセスで使用するには,一般的には,共有メモリ(メモリマップドファイル)
というものを実装します.
これは,違うプロセスで,変数類のアドレスに衝突が起きないようにするためです.

でも,「勝てば官軍,動けば正義」です.


るみ  2012-04-17 22:52:53  No: 41976

Mr.XRAYさん
回答ありがとうございます。
> これは,違うプロセスで,変数類のアドレスに衝突が起きないようにする> ためです.

とありますが、すいません。ちとわからないです。
Test1.Pub_Kansu()とTest2.Pub_Kansu()では衝突はないですよね?
具体的な例などありましたらもう少し詳しく教えてください。


Mr.XRAY  2012-04-17 23:31:37  No: 41977

>とありますが、すいません。ちとわからないです。

分からなくてもいいんです(笑)
ともかく,今開発しているアプリが正常に動作しているならば,

>Test1.Pub_Kansu()とTest2.Pub_Kansu()では衝突はないですよね?

分かりません.私はるみさんの傍にいるわけでもなく,DLLや,アプリのコードを全く
知らないのですから.こんなこと訊かれても困ります.

>具体的な例などありましたらもう少し詳しく教えてください。

例えば,何にかしらのフックなどが相当するかも知れません.
他のアプリでDLL内の処理をしている間にも,別のアプリがフック動作をすれば,
同時に,DLL内の関数で処理を行う可能性があります.

世の中には,るみさんが開発しているアプリ以外の,いろいろな動作,仕様の
アプリがあり,それを開発している方もいるということです.
当たり前ですけどね.(^^;


るみ  2012-04-17 23:43:32  No: 41978

Mr.XRAY、回答ありがとうございます。

ようするにDLL内でちゃんとした排他がされていれば問題なく使用できるけど排他がされていないと衝突は保障できないよってことですかね。


Mr.XRAY  2012-04-24 09:23:44  No: 41979

>ようするにDLL内でちゃんとした排他がされていれば

一般に,DLL内のグローバル変数は,排他的な処理です.
例えば,DLL内に A というグローバル変数があったとします.

このDLL内の変数Aに あるプログラムからセットします.
次に,他のプログラムが,同じくDLL内の変数Aに値をセットします.

同じ変数Aですが,これらは全く別の値になります(セットした値が違うのであれば).
つまり,DLL内のグローバル変数は,呼び出したプログラム専用の変数となります.


Mr.XRAY  2012-04-24 09:34:34  No: 41980

>DLL内のグローバル変数は,呼び出したプログラム専用の変数となります.

だからこそ,WindowsのいろいろなDLL内の関数を,どのプログラムからも利用可能となるわけです.


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

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






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