(编辑:除了header和main()函数的括号外,我没有排除任何代码.这里列出的代码行之间没有任何内容.)
.
我使用ReadFile函数来读取此COM3端口(它没有返回INVALID_HANDLE_VALUE或ERROR_FILE_NOT_FOUND):
LPCTSTR portName = "COM3" ;
HANDLE hSerial;
hSerial = CreateFile(portName,
GENERIC_READ | GENERIC_WRITE,
0, // exclusive access
NULL, // default security attributes
OPEN_EXISTING,
FILE_FLAG_OVERLAPPED,
NULL);
Run Code Online (Sandbox Code Playgroud)
并且有问题的ReadFile函数使用以下参数:
DWORD n = 512 ;
char szBuff[n] = {0};
DWORD dwBytesRead = 0;
if(!ReadFile(hSerial, szBuff, n, &dwBytesRead, NULL))
{
cout << "ReadFile error. Error code: " << GetLastError() << endl ;
cin.get() ;
return 0 ;
}
Run Code Online (Sandbox Code Playgroud)
我应该引入什么改变才能使读取成功?
(我搜索了函数的文档和其他StackOverflow问题,测试了很多东西,但找不到答案.)
在ReadFile文档中,您可以阅读:
lpOverlapped [in,out,optional]如果使用FILE_FLAG_OVERLAPPED打开hFile参数,则需要指向OVERLAPPED结构的指针,否则它可以为NULL.
所以,既然你FILE_FLAG_OVERLAPPED在CreateFile中指定了,你应该OVERLAPPED在ReadFile中提供.
在CreateFile中,您可以读取以下参数Communications Resources:
...并且可以打开手柄以进行重叠I/O.
所以你可以跳过FILE_FLAG_OVERLAPPEDCreateFile