多次调用CreateFileA时INVALID_HANDLE_VALUE

时间:2014-09-19 13:20:15

标签: c++ c file-io port

我正在使用CreateFileA,第一次调用它时,它按预期工作。但是当我第二次调用它时,它返回句柄INVALID_HANDLE_VALUE。可能是什么问题呢?仅供参考,我每次需要检查我的USB设备是否已连接时都会调用它。

int port = 500;
char port_name [MAX_CAR] = {0};

sprintf_s (port_name, MAX_CAR, "\\\\.\\COM%d", port);

com->id = CreateFileA (port_name,
                       GENERIC_READ | GENERIC_WRITE,
                       0,
                       NULL,
                       OPEN_EXISTING,
                       FILE_FLAG_OVERLAPPED,
                       NULL);
编辑:我确实尝试像CloseHandle一样使用CloseHandle(com-> id);但它没有帮助。

2 个答案:

答案 0 :(得分:4)

来自documentation

  

当应用程序使用返回的对象句柄完成时   CreateFile,使用 CloseHandle 功能关闭句柄。这不是   只释放系统资源,但可以对事物产生更广泛的影响   喜欢共享文件或设备并将数据提交到磁盘。细节   在本主题中适当注明。

答案 1 :(得分:1)

使用GetLastError获取错误代码,并使用FormatMessage获取人类可读的错误说明,或者只使用Google错误代码。

导致相同错误的原因有很多(CreateFile返回INVALID_HANDLE_VALUE),如果没有GetLastError,您将很难找出真正的原因。