C++ Windows WriteFileGather函数将最后一个错误设置为错误\u无效\u参数

C++ Windows WriteFileGather函数将最后一个错误设置为错误\u无效\u参数,c++,windows,iocp,C++,Windows,Iocp,重现我的问题的示例代码: #include <windows.h> #include <iostream> int main() { using namespace std; HANDLE hdl = CreateFile("test.file", GENERIC_WRITE, FILE_SHARE_WRITE, NULL, OPEN_ALWAYS, FILE

重现我的问题的示例代码:

#include <windows.h>
#include <iostream>

int main()
{
  using namespace std;
  HANDLE hdl = CreateFile("test.file", GENERIC_WRITE,
                          FILE_SHARE_WRITE, NULL, OPEN_ALWAYS,
                          FILE_ATTRIBUTE_NORMAL  |
                          FILE_FLAG_NO_BUFFERING |
                          FILE_FLAG_OVERLAPPED,
                          NULL);
  char data[4096] = {0};
  DWORD written = 0;

  for(size_t i = 0; i < sizeof(data); ++i)
    data[i] = 'a' + (i % 26);

  OVERLAPPED async_hdl = {0};
  FILE_SEGMENT_ELEMENT segs[3] = {0};

  segs[0].Buffer = PtrToPtr64(data);
  segs[1].Buffer = PtrToPtr64(data);

  if(!WriteFileGather(hdl, segs, 8192, NULL, &async_hdl)) {
    cout << "Last error: " << GetLastError() << endl;
    cout << "overlapped internal status: " << async_hdl.Internal << endl;
    // Last error: 87
    // overlapped internal status: 259
  }
  CloseHandle(hdl);
  return 0;
}
#包括
#包括
int main()
{
使用名称空间std;
HANDLE hdl=CreateFile(“test.file”),GENERIC_WRITE,
文件共享写入、空、始终打开,
文件属性正常|
文件\u标志\u无\u缓冲|
文件\u标志\u重叠,
无效);
字符数据[4096]={0};
DWORD WRITED=0;
对于(大小i=0;icoutMSDN:
asemgmentarray
…系统内存页,必须在系统内存页大小边界上对齐。使用
\u aligned\u malloc()
而不是堆栈内存。

MSDN:
asemgmentarray
…系统内存页,必须在系统内存页大小边界上对齐。使用
\u aligned\u malloc()
而不是堆栈内存。

MSDN:
asemgmentarray
…系统内存页,必须在系统内存页大小边界上对齐。使用
\u aligned\u malloc()
而不是堆栈内存。

MSDN:
asemgmentarray
…系统内存页,必须在系统内存页大小边界上对齐。使用
\u aligned\u malloc()
而不是堆栈内存。

您错过了
GetLastError
只有在函数返回错误代码时才可靠。除非
WriteFileGather
返回0,否则不会出现任何错误,
GetLastError()
应该被忽略。@molbdnilo请原谅我的误导。我已经更新了代码以检查
WriteFileGather
的返回值。您没有注意到
GetLastError
只有在函数返回错误代码时才是可靠的。除非
WriteFileGather
返回0,否则不会出错,
GetLastError()
应该被忽略。@molbdnilo请原谅我的误导。我已经更新了代码以检查
WriteFileGather
的返回值。您没有注意到
GetLastError
只有在函数返回错误代码时才是可靠的。除非
WriteFileGather
返回0,否则不会出错,
GetLastError()
应该被忽略。@molbdnilo请原谅我的误导。我已经更新了代码以检查
WriteFileGather
的返回值。您没有注意到
GetLastError
只有在函数返回错误代码时才是可靠的。除非
WriteFileGather
返回0,否则不会出错,
GetLastError()
应该被忽略。@molbdnilo请原谅我的误导。我已经更新了代码以检查
WriteFileGather
的返回值。我刚刚错过了那一行!你挽救了一天!我刚刚错过了那一行!你挽救了一天!我刚刚错过了那一行!你挽救了一天!