お世話になっております。
現在、グローバルフックのプログラムを
作成してます。
複数のプロセスで参照したいものがあり
mapをdata_seg内に定義したのですが
、要素数が増えません。
このようなんことは難しいのでしょうか
サイズ固定の変数としてプログラムを
作成しないといけないのでしょうか。
そうですね。
data_seg 内に置く変数は、コンパイル時にサイズが定まっている必要があります。
vector って、&vector と &vector[0] が同じ値になる保証ってありましたっけ?
無いなら、&vector は data_seg 内にあっても、&vector[0] はセグメント外(ヒープ)
に置かれている可能性もあります。
map も同様。
> vector って、&vector と &vector[0] が同じ値になる保証ってありましたっけ?
ないと思います。
動的にメモリを確保せずに、固定メモリでvectorを実装することは可能かもしれません
が、
default allocatorはまずそうなってませんし、自作でもしない限りヒープ上では?
data_segからメモリを取得/解放するアロケータ:tiny_allocator<T>を用意すればよさ
げ。
data_segからメモリを取得/解放するグローバルな operator new/delete を再定義して
もいいかな。
> data_segからメモリを取得/解放する
これでもDLLロード時のベースアドレスが異なった場合、ポインタがずれてダメじゃない
ですかね。
DLL 内のデータをアプリケーションまたはほかの DLL と共有する方法
http://msdn.microsoft.com/ja-jp/library/h90dkhs0.aspx
『Microsoft ではプロセス間での C++ オブジェクトの共有をお勧めできません』とある
ので、特別な理由でもない限り避けた方が良いのではないかと。