プロが教える店舗&オフィスのセキュリティ対策術

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されているのか データを共有することが出来ませんでした。

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

A 回答 (2件)

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



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

char **huga;

char hoge[10][256];

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

動的確保では無理なんじゃないですかね。


ヒープ領域が共有メモリになっているワケではありませんし。

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

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


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

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

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

お礼日時:2012/06/29 13:16

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!