提问人:ElSnowman 提问时间:6/2/2023 更新时间:6/2/2023 访问量:47
WriteFileEx 不调用完成例程的修复方法是什么?
What is a fix for WriteFileEx not calling the completion routine?
问:
背景:我有一个 HID 设备,我正在从我的 DLL 写入该设备。我的 DLL 由 DirectInput 加载,并在函数调用中接收数据。我将其中一些数据发送到我的设备。使用 ,游戏可能由于同步写入而陷入困境(当我不执行写入时它运行良好)。WriteFile
问题:在尝试对我的 HID 设备进行异步写入操作时,我使用了 .我遇到了一个问题,即我的完成例程没有被调用,所以我无法释放我在调用之前动态分配的结构。WriteFileEx
OVERLAPPED
WriteFileEX
法典:
my_hid = CreateFile(reinterpret_cast<DIHIDFFINITINFO*>(initialization_information)->pwszDeviceInterface, GENERIC_READ | GENERIC_WRITE, FILE_SHARE_READ | FILE_SHARE_WRITE, NULL, OPEN_EXISTING, FILE_FLAG_OVERLAPPED, NULL);
LPOVERLAPPED over = new OVERLAPPED{ 0 };
BOOL success = WriteFileEx(my_hid, effect_report, EFFECT_REPORT_SIZE, over, (LPOVERLAPPED_COMPLETION_ROUTINE)completion_routine);
VOID WINAPI completion_routine(DWORD dwErrorCode, DWORD dwNumberOfBytesTransfered, LPOVERLAPPED lpOverlapped) { delete lpOverlapped; }
笔记:
- 数据仍在发送中。由我的 HID 设备接收。
WriteFileEx
返回非零GetLastError
返回零- 为简洁起见,示例中未显示缓冲区分配或解除分配。
答: 暂无答案
评论
ERROR_IO_PENDING