CreateFile () возвращает неверный указатель с адресом FFFFFF

Я просто хочу прочитать файл, используя функцию 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 (неверный указатель)

Кто-нибудь может мне помочь, пожалуйста?
Заранее спасибо за помощь.

0

Решение

Следующие:

if (!(hFile = CreateFile(...)))

не так, как вы проверяете на ошибки.

От документация:

Если функция не работает, возвращаемое значение INVALID_HANDLE_VALUE, Чтобы получить расширенную информацию об ошибке, позвоните GetLastError,

INVALID_HANDLE_VALUE является -1, или же 0xFFFFFFFFF в шестнадцатеричном виде Вам нужно позвонить GetLastError() чтобы выяснить, что случилось.

2

Другие решения

Когда вы получаете сообщение об ошибке от большинства Win32 API, вы можете позвонить GetLastError() чтобы выяснить, что пошло не так. Возьми это оттуда.

Этот тип защитного программирования необходим для продуктивного программирования на Win32. Фактические условия сбоя зависят от API, поэтому используйте MSDN чтобы проверить, что вы должны искать в ваших путях ошибок.

0

По вопросам рекламы [email protected]