こんにちはゲストさん。会員登録(無料)して質問・回答してみよう!

締切り済みの質問

CreateFileMapping について

CreateFileMapping を使用し アプリケーション間のデータ共有プログラムを作成しています。
CreateFileMapping には構造体を登録し その構造体で 文字列配列を動的に確保したいのですが

// 構造体
typedef struct {
  char **huga;
} HOGE;

main ----------------------------------

// マップ
map = CreateFileMapping(
  (HANDLE)0xffffffff,
  NULL,
  PAGE_READWRITE | SEC_COMMIT,
  0, sizeof(HOGE),
  "MAP_NAME");

// ビュー
data = ( HOGE * )MapViewOfFile( map, FILE_MAP_ALL_ACCESS, 0, 0, sizeof(HOGE) );

// 初回
flag = ( GetLastError() == ERROR_ALREADY_EXISTS );
if ( !flag ) {

  // 確保 1
  data->huga = new char*[ 10 ];
  for ( int i = 0; i < 10; i++ ) {

    // 確保 2
    data->huga[ i ] = new char[ 256 ];
sprintf_s( data->huga[ i ], 256, "[ %d ]", i );
  }
}

// 確認
for ( int i = 0; i < 10; i++ ) {
  MessageBox( NULL, data->huga[ i ], "MAP", MB_OK );
}

上記のようにすると
確保する前の構造体が Mappingされているのか データを共有することが出来ませんでした。

動的確保した文字列配列を共有するには どのように設計すれば宜しいでしょうか。
よろしくお願いします。

投稿日時 - 2012-06-29 12:04:21

QNo.7561644

すぐに回答ほしいです

このQ&Aは役に立ちましたか?

0人が「このQ&Aが役に立った」と投票しています

回答(2)

ANo.2

例えばプロセスAとプロセスBがあったとして、この2つのメモリ領域(コード領域・スタック領域・ヒープ領域)は完全に独立しています。

よって、プロセスAのヒープ領域のアドレスをプロセスBに教えたとしてもアクセスする事は出来ません。

char **huga;

char hoge[10][256];

などに変更するなどして受け渡しするしかないと思います。

投稿日時 - 2012-07-01 20:33:12

ANo.1

Wr5

動的確保では無理なんじゃないですかね。
ヒープ領域が共有メモリになっているワケではありませんし。

>動的確保した文字列配列を共有するには どのように設計すれば宜しいでしょうか。

ファイルマッピングに収まるようにコピーして受け渡す…とかでしょうかね。
普通にファイルを介して受け渡しするのとおなじような状況になるかと。


動的確保をVirtualAllocEx()を使うコトで、他プロセスからアクセスできる…かも知れません。
使ったことはないので検索してみて下さい。としか言えませんが。

投稿日時 - 2012-06-29 12:31:49

お礼

無理なのでしょうか。
VirtualAllocEx について調べてみたいと思います。

ありがとうございました。

投稿日時 - 2012-06-29 13:16:28

あなたにオススメの質問