typedef struct Header
{
unsigned long point;
unsigned long size;
char dummy[512 - sizeof(unsigned long) - sizeof(unsigned long)];
} HEADER;
typedef struct ClassInfo
{
unsigned long number;
char biko[512 - sizeofunsigned long )];
} CLASSINFO;
【ヘッダー(512バイト固定) 】 + 【クラス情報(512バイト) × <ユーザー指定> 】となっています。
(例) ユーザーが9クラスの情報が欲しい!といえば ヘッダー(512) + クラス情報(512×9) = 5120の共有メモリを作成する。
この共有メモリを作成するプログラムとして私が考えたのが以下になります。
------------------------------------------------------------------------------------------------------------------------------
int m_Count = 9;//ユーザーが指定するクラス数
void Test()
{
// まず共有メモリを作成する。メモリをかんがえる
long Size = 512 + m_Count * 512;//今回の場合5120バイト
HANDLE handle= CreateFileMapping(INVALID_HANDLE_VALUE,
NULL,
PAGE_READWRITE,
0,
Size, //共有メモリサイズ
"ClassProgram")
);
//この後各領域を割り当てる。まずヘッダー 512バイト
HEADER *header= (HEADER*)MapViewOfFile(handle,
FILE_MAP_ALL_ACCESS, // 読書き両方
0,
0,
sizeof(HEADER ));
//次に9個のクラス情報を割り当てる 512x9バイト
CLASSINFO *classInfo = (CLASSINFO *)MapViewOfFile(handle,
FILE_MAP_ALL_ACCESS, // 読書き両方
0,
sizeof(HEADER),
sizeof(CLASSINFO) * 9 );
ここで問題があり、ヘッダーの後に9個のクラス情報を割り当てようとして、上記のようにマッピングしようとすると
マッピング失敗になります。原因は引数にて指定しているdwFileOffsetLowがSYSTEM_INFOのメンバーの倍数になっていないからというのが調べて分かりました。
かといって倍数を指定するのは無理そうな感じがしました。
ここからさきにすすめません。
どのようなコードになるのでしょうか?
ほかの方法で実現できれば他の方法でも構いません
以上ご教授お願い致します。
}