Я просто хочу прочитать файл, используя функцию CreateFile, например:
#include <iostream>
#include <windows.h>
#include <stdio.h>
int main(int argc, char **argv)
{
PIMAGE_DOS_HEADER pImageDosHeader;
HANDLE hFile = NULL;
HANDLE hMapObject;
PUCHAR uFileMap;
if (argc < 2)
return (-1);
std::cout << "hFile=" << hFile << std::endl;
if (!(hFile = CreateFile((LPCWSTR)argv[1], GENERIC_READ | GENERIC_WRITE, FILE_SHARE_READ,
NULL, OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL, NULL)))
{
return (-1);
} else {
std::cout << argv[1] << std::endl;
std::cout << "hFile=" << hFile << std::endl;
getchar();
}
return (0);
}
Проблема в том, что вывод выглядит следующим образом:
hFile=000000 (указатель инициализируется значением NULL -> OK)
hFile=FFFFFF (неверный указатель)
Кто-нибудь может мне помочь, пожалуйста? Заранее спасибо за вашу помощь.
INVALID_HANDLE_VALUE
.hFile=0
является допустимым результатом,-1
недопустимым. Вы должны позвонитьGetLastError()
, чтобы дать ответ, почему он недействителен - это может быть много вещей, наиболее вероятно, что вы пытаетесь открыть существующий файл, который не существует (например, вы находитесь в неправильном каталоге, возможно?) - person Mats Petersson   schedule 07.03.2013argv[1]
к(LPCWSTR)
. Это говорит программе взять этот массив символов ASCII и интерпретировать содержащиеся в нем байты как расширенные символы. Не то, что вы хотите, я полагаю. Либо используйтеwmain()
, либо позвонитеCreateFileA()
. - person Angew is no longer proud of SO   schedule 07.03.2013@err,hr
, оно будет автоматически отображать сообщение об ошибке после каждого вызова API, поэтому вам не нужно будет расшифровывать код ошибки. - person   schedule 07.03.2013