나는 IOCP로 게임을하고 있습니다. 비동기가 주 스레드의 파일에서 데이터를 읽는 간단한 응용 프로그램을 작성하려고합니다. 그러나 내가 오류 (ERROR_INVALID_PARAMETER) ReadFileEx 함수를 받고 있어요,하지만 난 그것을하고있어 보인다. 내가 도대체 뭘 잘못하고있는 겁니까? 여기 내 예입니다IOCP 및 ReadFileEx 사용
#include "stdafx.h"
#include <windows.h>
#include <assert.h>
#include <stdint.h>
VOID CALLBACK ReadCb(DWORD dwErrorCode,DWORD dwNumberOfBytesTransfered,LPOVERLAPPED lpOverlapped)
{
fprintf(stderr,"i was here\n");
}
int _tmain(int argc, _TCHAR* argv[])
{
HANDLE main_io,file_i;
HANDLE file_handle;
DWORD bytes_recvd;
ULONG_PTR data = 0;
OVERLAPPED overlapped;
LPOVERLAPPED poverlapped = &overlapped;
uint8_t read_data[1024];
DWORD err;
main_io = CreateIoCompletionPort(INVALID_HANDLE_VALUE,NULL,0,0);
assert(main_io != NULL);
file_handle = CreateFile(L"test.txt",GENERIC_READ,0,NULL,OPEN_EXISTING,FILE_FLAG_OVERLAPPED, NULL);
assert(file_handle != INVALID_HANDLE_VALUE);
file_i = CreateIoCompletionPort(file_handle,main_io,data,0);
assert(file_i != NULL);
memset(&overlapped,0,sizeof(OVERLAPPED));
err = ReadFileEx(file_handle,(LPVOID)read_data,1024,&overlapped,ReadCb);
fprintf(stderr,"err %d\n",GetLastError());
assert(err != 0);
assert(GetQueuedCompletionStatus(file_i,&bytes_recvd,&data,&poverlapped,INFINITE));
CloseHandle(main_io);
return 0;
}
OVERLAPPED overlapped = {};를 사용할 수 있습니다. memset (& overlapped, 0, sizeof (OVERLAPPED)) 대신; – evpo