C/C++ CreateFileA fails
C/C++ CreateFileA fails
我正在尝试制作一个图像查看器,当我硬编码文件的路径时,一切都正常,但当我试图获取路径以便用它打开文件时,它不起作用,什么也没发生。
调试时,我发现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()
使其更容易。
相关文章:
- CreateFileA方法出现问题
- Travis-CI Complex Makefile fails
- OpenCV: fs.open fails
- GetProcAddress fails
- NetUserGetInfo fails
- C++ - bind() fails
- MS Detours - DetourAttach fails
- ld fails to find glfw3
- Visual Studio 2017 .Net Core 2.0 Angular Publish Fails
- SHGetKnownFolderItem - fails on Wow64
- IVssBackupComponents::InitializeForBackup fails
- strftime() fails on Raspberry Pi (Raspbian)
- c++ fails to find includes
- ASSERT(AfxGetThread() == NULL); fails
- SSL_CTX_load_verify_locations Fails with SSL_ERROR_NONE
- dijkstra_shortest_paths Boost Graph Lib 1.57.0 fails
- C++ MapViewOfFile fails
- D3D11CreateDeviceAndSwapChain Fails to succeed
- 窗口在进程启动前没有弹出 ->尝试了 sleep() 方法,但"fails"
- ace register_handler fails