0

我只想使用函数 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(无效指针)

有人可以帮助我吗?在此先感谢您的帮助。

4

2 回答 2

2

以下:

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

不是您检查错误的方式。

文档中:

如果函数失败,则返回值为INVALID_HANDLE_VALUE。要获取扩展的错误信息,请调用GetLastError

INVALID_HANDLE_VALUE-1,或0xFFFFFFFFF十六进制。你需要打电话GetLastError()了解发生了什么。

于 2013-03-07T14:11:48.420 回答
0

当您从大多数 Win32 API 收到错误时,您可以调用GetLastError()以找出问题所在。从那里拿走它。

这种类型的防御性编程对于高效的 Win32 编程至关重要。失败的实际情况因 API 而异,因此请使用MSDN检查您应该在失败代码路径中查找的内容。

于 2013-03-07T14:11:40.383 回答