【发布时间】:2014-11-14 02:37:43
【问题描述】:
我正在使用 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);但这无济于事。
【问题讨论】:
-
您已超过最大打开文件句柄。确保在使用后关闭把手以作废。
-
只要你不添加正确的错误报告,你就瞎了眼。当您修改串行端口时,使用 GetLastError() 绝不是可选的,太多的事情可能会超出您的控制范围。
-
您的 CloseHandle() 调用是否真正被执行?当您在线上断点时,'com->id' 是否与 CreateFileA() 调用返回的值相同?你当时还没有,万一,已经摧毁了com?另外,@HansPassant 所说的。