のびっこ日記

(*|         |*)v ういっすー。 VRとかコンピュータービジョンとかARとかに興味があります。OpenCVとかPCLとかOculusRiftとかUnityとかKinectとかLeapMotionとか手を出していますが、いろいろドツボにハマっててくじけそう。誰か教えてー

同一の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