我只想使用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 - &gt; OK)
hFile = FFFFFF(指针无效)
有人可以帮助我吗? 在此先感谢您的帮助。
答案 0 :(得分:2)
以下内容:
if (!(hFile = CreateFile(...)))
不是您检查错误的方式。
如果函数失败,则返回值为
INVALID_HANDLE_VALUE
。要获取扩展错误信息,请致电GetLastError
。
INVALID_HANDLE_VALUE
为-1
,或0xFFFFFFFFF
为十六进制。您需要致电GetLastError()
以了解发生的事情。
答案 1 :(得分:0)
当您从大多数Win32 API收到错误时,您可以致电GetLastError()
以找出问题所在。从那里拿走它。
这种防御性编程对于高效的Win32编程至关重要。失败的实际情况因API而异,因此请使用MSDN检查您在失败代码路径中应查找的内容。