此代码中的哪个ReadFile参数不正确?(错误代码87)

dzi*_*990 0 c++ port readfile

(编辑:除了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问题,测试了很多东西,但找不到答案.)

mar*_*inj 5

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