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

締切り済みの質問

共有メモリへのマッピング(MapViewOfFile)について

共有メモリについて(特にMapViewOffileについて)教えてください。
ある構造体と、あるデータAを共有メモリへマッピングしたい考えています。

構造体は、
typedef struct _Data {
int length;
long data;
char mIntArrayData[256];
} Data;

データAは、short型の配列(要素数はx*y*z,x,y,zはcsvファイル等から読み込む)で、サイズをdatasize = sizeof(short) * x * y * z;とします。

この2つを使って、
両方のデータを
long AllDataSize = sizeof(Data) + datasizeとしました。
このサイズを使って、共有メモリのマップハンドルを
hMap = CreateFileMapping(INVALID_HANDLE_VALUE,
NULL,PAGE_READWRITE,AllDataSize,MAPPED_FILE_NAME);(MAPPED_FILE_NAMEは、 メモリマップドファイルの名前)
で、生成しました。

生成はできたのですが、データAにアクセスするための下記のような時にマッピングに失敗してしまいました。
DWORD dwOffset = sizeof(DATA);
short *pData = (short *)MapViewOfFile(hMap, FILE_MAP_WRITE, 0, dwOffset, Bytes);
(Bytesはマッピングしたいバイト数でsizeof(short)の倍数)

次のようなDATAにアクセスするマッピングには成功しています。
DWORD dwOffset = 0;
DATA *pDATA = (DATA *)MapViewOfFile(hMap, FILE_MAP_WRITE, 0, dwOffset, sizeof(DATA));

色々なサイト等を調べて、考えてみたのですが、怪しいところはdwOffsetと、CreateFileMappingで、マッピングしたい全体のファイルサイズを、構造体とデータAのサイズの単純な足し算としているところと考えています。ただ、はっきりとした答えが全くわからないので、どうか御教授お願いします。

投稿日時 - 2010-01-15 02:04:24

QNo.5594076

すぐに回答ほしいです

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

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

回答(1)

ANo.1

dwFileOffsetLow がシステムの単位に合ってないんじゃないでしょうか?

起きているエラー値を調べ、MSDNのマニュアルを良く読んで、使い方に間違いが無いか考えた方が早いと思いますよ。

投稿日時 - 2010-01-16 17:34:24

あなたにオススメの質問