CreateFile()返回一个地址为FFFFFF的无效指针

时间:2013-03-07 14:07:29

标签: c++ windows msdn createfile

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

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

2 个答案:

答案 0 :(得分:2)

以下内容:

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

不是您检查错误的方式。

来自documentation

  

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

INVALID_HANDLE_VALUE-1,或0xFFFFFFFFF为十六进制。您需要致电GetLastError()以了解发生的事情。

答案 1 :(得分:0)

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

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