Я просто хочу прочитать файл, используя функцию 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 (неверный указатель)
Кто-нибудь может мне помочь, пожалуйста?
Заранее спасибо за помощь.
Следующие:
if (!(hFile = CreateFile(...)))
не так, как вы проверяете на ошибки.
От документация:
Если функция не работает, возвращаемое значение
INVALID_HANDLE_VALUE
, Чтобы получить расширенную информацию об ошибке, позвонитеGetLastError
,
INVALID_HANDLE_VALUE
является -1
, или же 0xFFFFFFFFF
в шестнадцатеричном виде Вам нужно позвонить GetLastError()
чтобы выяснить, что случилось.
Когда вы получаете сообщение об ошибке от большинства Win32 API, вы можете позвонить GetLastError()
чтобы выяснить, что пошло не так. Возьми это оттуда.
Этот тип защитного программирования необходим для продуктивного программирования на Win32. Фактические условия сбоя зависят от API, поэтому используйте MSDN чтобы проверить, что вы должны искать в ваших путях ошибок.