ReadFileの読み込みエラーについて
こんばんは
Win32 APIでプログラミングをやっているのですが、そのAPIの中でReadFileというものがありますよね?
この関数でエラー値が出力され、第二引数としてBITMAPINFO構造体に格納するはずの値がそのままです。
以下に一部ソースを載せます
BOOL Cell_Init( HINSTANCE hInstance )
{
BITMAPINFO bmi2;
HANDLE hFile;
DWORD dwBytes;
// 作成するビットマップの情報を設定する
BITMAPFILEHEADER bmpFileHeader;
BITMAPINFO bmi;
// ビットマップのハンドルと、作成したバッファの先頭アドレスを取得
void* pImage;
HBITMAP hBitmap;
// デスクトップのDCを得る
HDC tmpDC = GetDC(GetDesktopWindow() );
// HBITMAPにHDCを結びつける
g_hdc_cell = CreateCompatibleDC( tmpDC );
DWORD er;
hFile = CreateFile("cointos.bmp", GENERIC_READ, 0, NULL,
OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL, NULL);
er = GetLastError();
if(hFile == INVALID_HANDLE_VALUE) return 0;
ReadFile(hFile, &bmpFileHeader, sizeof(BITMAPFILEHEADER), &dwBytes, NULL);
er = GetLastError();
if(bmpFileHeader.bfType != 0x4D42) {
MessageBox(NULL, TEXT("This is not a bitmap file"), NULL, MB_OK);
return FALSE;
}
//ここでbmi2に格納される値が格納されていない(そのためでかい値のまま) そのためCreateDIBSectionではエラーを起こす
ReadFile(hFile, &bmi2, bmpFileHeader.bfOffBits - dwBytes, &dwBytes, NULL);
er = GetLastError(); // ここの部分でエラー値998が出ます
hBitmap = CreateDIBSection(tmpDC, &bmi2, DIB_RGB_COLORS, (LPVOID*)&pImage, NULL, 0);
ReadFile(hFile,pImage,
bmpFileHeader.bfSize - bmpFileHeader.bfOffBits, &dwBytes, NULL);
SelectObject( g_hdc_cell, hBitmap );
CloseHandle(hFile);
ReleaseDC(GetDesktopWindow(), tmpDC);
return TRUE;
}
なぜこうなるんでしょうか?
bmi2はBITMAPINFO構造体でローカルで宣言しています。これがポインタだと大丈夫なんですが
なぜ変数ではダメなのか分かりません。 あらかじめ確保されているスタック領域の容量限界でも
ないと思うのですが。
分かる方がいらっしゃったらよろしくお願いします。
開発環境はVS.2005 です。
お礼
私の環境では、提示いただいたサンプルでも不在ファイル指定でCreateFileが通ってしまいますが、別のPCで試したところ、不在ファイル指定でGetLastError()で2が返ってきました。 特権の設定で違いがあるのかもしれませんので、私のPCと正常動作しているPCを見比べようと思います。 ありがとうございました。