こんにちは。
VC++.NET 2003を使って開発をしています。
exeで宣言してある変数を
DLL側で参照したいのですが
DLLにパラメータで渡す以外にどんな方法があるのですか?
共有メモリとかになるのでしょうか?
DLLは文字通りダイナミックにリンクされ、EXEと同一アプリとして実行されます
すなわち実行空間が同一ということであり、パラメタでアドレスを指定すれば、それがいくらでも参照できます
ですので、参照したい変数をすべてひとつの構造体で定義しておき、そのアドレスを渡すのが一般的です
と上記は、ひとつのEXEのみ使用する場合ですが、それではDLLである必然性がありません
DLLは、複数のEXEから呼び出されて初めて真価を発揮します
複数のEXEが同一のDLLを呼び出しても、各DLLは、別の空間(すなわち各EXEの実行空間)で実行されるため、DLL間でデータの共有ができません
こういう場合にはじめて、共有メモリ、レジストリ、socket、DDE、等他プロセスとの連携技術が必要になります
簡単に説明しますので、目的の技術を学んでください
レジストリ:変数の数が少ない場合(数個)最も実装が容易
共有メモリ:変数の数が多い場合これを使用するが、アクセスするたびに排他処理必須となる
socket:他のマシンとも共有が可能だが、実装が面倒、遅延も発生する
DDE:現在はあまり利用されない(と思う)
これらを理解し、DLLの目的別に実装法を決定してください
細かいことは忘れて、
COM+ を勉強してください。
せっかく .NET なんだから。
ツイート | ![]() |