dll側のグローバル変数をexe側で共有し、利用しようと思っています。
実現したいのは、下記のような処理でしょうか?この通りであれば、C++言語のドメイン知識はほぼ無関係です。
- 共有ライブラリ(dll)内部で「グローバル変数」を定義。
- 2つ以上の異なるプロセス(exe)からこの共有ライブラリをリンクし、プロセスを跨いだ「グローバル変数」の共有を行いたい。
Windows OSプロセス/共有ライブラリに固有のドメイン知識が必要となります。実装方法は、記事「同一のDLLを使用しているアプリ同士で、データの共有をする方法」を参照ください。
dllをexeが読み込む場合、dllの情報はヒープ領域に割り当てられるのでしょうか?
dll内で定義されたグローバル変数は、dll用に確保したヒープ領域内で静的領域的な場所を作って定義するのでしょうか?
実行可能なアセンブリコードを格納する領域と、静的変数などのデータ格納領域は区別されます。プログラム実行中に動的確保されるヒープメモリ領域は、これらとはまた別に存在します。
C++言語におけるグローバル変数は、通常は プロセス単位に独立した「データ格納領域」に配置されます。先記事の実現方式(下記引用)では、プロセス横断的に共有されるセクション.shared
を用意し、グローバル変数a
がその特別な.shared
共有セクションに配置されるようリンカに指示しています。
c++
1// WindowsOS固有コード
2#pragma comment( linker, "/SECTION:.shared,RWS" )
3#pragma data_seg( ".shared" )
4extern int a = 0;
5#pragma data_seg()