• 締切済み

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されているのか データを共有することが出来ませんでした。 動的確保した文字列配列を共有するには どのように設計すれば宜しいでしょうか。 よろしくお願いします。

みんなの回答

回答No.2

例えばプロセスAとプロセスBがあったとして、この2つのメモリ領域(コード領域・スタック領域・ヒープ領域)は完全に独立しています。 よって、プロセスAのヒープ領域のアドレスをプロセスBに教えたとしてもアクセスする事は出来ません。 char **huga; ↓ char hoge[10][256]; などに変更するなどして受け渡しするしかないと思います。

  • Wr5
  • ベストアンサー率53% (2173/4061)
回答No.1

動的確保では無理なんじゃないですかね。 ヒープ領域が共有メモリになっているワケではありませんし。 >動的確保した文字列配列を共有するには どのように設計すれば宜しいでしょうか。 ファイルマッピングに収まるようにコピーして受け渡す…とかでしょうかね。 普通にファイルを介して受け渡しするのとおなじような状況になるかと。 動的確保をVirtualAllocEx()を使うコトで、他プロセスからアクセスできる…かも知れません。 使ったことはないので検索してみて下さい。としか言えませんが。

sosoMMM8
質問者

お礼

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

関連するQ&A