C/C++ CreateFileA fails

C/C++ CreateFileA fails

本文关键字:fails CreateFileA C++      更新时间:2024-09-30

我正在尝试制作一个图像查看器,当我硬编码文件的路径时,一切都正常,但当我试图获取路径以便用它打开文件时,它不起作用,什么也没发生。

调试时,我发现CreateFileA返回INVALID_HANDLE_VALUE

这让我相信错误应该在这两行代码中。

LPSTR FileA = GetCommandLine();
HANDLE FileHandle = CreateFileA(FileA, GENERIC_READ, FILE_SHARE_READ, NULL, OPEN_EXISTING, 0, NULL);

CreateFileA()在失败时返回INVALID_HANDLE_VALUE时,使用GetLastError()找出失败的原因。但在这种情况下,GetCommandLine()可能不会返回您期望的路径。

假设它实际调用的是Win32GetCommandLineA()函数,而不是程序中的其他函数,那么该函数将返回用于启动调用进程的命令行,即"C:<path>myapp.exe <parameters>"。如果没有<parameters>,那么您将尝试打开自己程序的EXE,而不是图像文件。如果存在<parameters>,那么您将向CreateFileA()传递一个无效的文件路径。

您需要解析命令行以提取您真正想要的文件路径,然后您可以尝试在该路径打开文件。看一看解析C命令行参数和解析C++命令行参数。考虑使用CommandLineToArgvW()使其更容易。