- 締切済み
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されているのか データを共有することが出来ませんでした。 動的確保した文字列配列を共有するには どのように設計すれば宜しいでしょうか。 よろしくお願いします。
- みんなの回答 (2)
- 専門家の回答
みんなの回答
- toda hiro(@hiro_knigh)
- ベストアンサー率39% (59/151)
例えばプロセスAとプロセスBがあったとして、この2つのメモリ領域(コード領域・スタック領域・ヒープ領域)は完全に独立しています。 よって、プロセスAのヒープ領域のアドレスをプロセスBに教えたとしてもアクセスする事は出来ません。 char **huga; ↓ char hoge[10][256]; などに変更するなどして受け渡しするしかないと思います。
- Wr5
- ベストアンサー率53% (2173/4061)
動的確保では無理なんじゃないですかね。 ヒープ領域が共有メモリになっているワケではありませんし。 >動的確保した文字列配列を共有するには どのように設計すれば宜しいでしょうか。 ファイルマッピングに収まるようにコピーして受け渡す…とかでしょうかね。 普通にファイルを介して受け渡しするのとおなじような状況になるかと。 動的確保をVirtualAllocEx()を使うコトで、他プロセスからアクセスできる…かも知れません。 使ったことはないので検索してみて下さい。としか言えませんが。
お礼
無理なのでしょうか。 VirtualAllocEx について調べてみたいと思います。 ありがとうございました。