同一のDLLを使用しているアプリ同士で、データの共有をする方法(・ ・)
最近あんまりブログ更新してませんでしたが、そろそろ復活したいと思います。
しかし、何書こうかな~。リクエスト有ったらお願いしますね。
今日はWin32の方のWindowsのDLLの話です。
WindowsのDLL、よく使う同じルーチンとかをまとめて入れておくといろんなEXEから呼べて便利なのですが、通常、複数のEXEから呼び出された時にはデータの共有がされません。呼び出し元のEXE毎に、別の変数用のデータのエリアが作成されます。
EXE(1) --> DLL
EXE(2) --> DLL
こんなかんじ。
でも、たまにEXE(1)でもEXE(2)でも同じ変数を参照したい時ってあるじゃないですか。
そんな時どうしたら良いのかというお話です。
実はこんな風にすると共有できたりします。
#pragma comment( linker, "/SECTION:.shared,RWS" )
#pragma data_seg( ".shared" )
extern int a = 0;
#pragma data_seg()
こうすると、データセグメントという共通のメモリエリアに変数を置いてくれます。
上の例でいうと、int aに関してだけは、
EXE(1)--> DLL <-- EXE(2)
こんな感じにアクセスができます。
ただ、アクセスは排他処理とかされないので、問題になるケースではクリティカルセクションとかミューテックスで囲んであげて下さいね。
今日はこのへんで。。(・ ・v