我正在使用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);但它没有帮助。
答案 0 :(得分:4)
当应用程序使用返回的对象句柄完成时 CreateFile,使用 CloseHandle 功能关闭句柄。这不是 只释放系统资源,但可以对事物产生更广泛的影响 喜欢共享文件或设备并将数据提交到磁盘。细节 在本主题中适当注明。
答案 1 :(得分:1)
使用GetLastError
获取错误代码,并使用FormatMessage
获取人类可读的错误说明,或者只使用Google错误代码。
导致相同错误的原因有很多(CreateFile
返回INVALID_HANDLE_VALUE
),如果没有GetLastError
,您将很难找出真正的原因。