sinat_33635313 2019-12-25 17:47 采纳率: 50%
浏览 240

求助WriteFileEx返回错误代码87的解决办法

异步存一个文件,程序相关代码:
//初始化
OVERLAPPED Overlap[2]
verlap[0].Offset = 0;
Overlap[0].OffsetHigh = 0;

//调用
WriteFileEx(theImagesFile_Info.Handle, InfoBuf[0], nBufBytes,
&Overlap[0], IoCompletionRoutine);
DWORD err=GetLastError();
//err=87;
theImagesFile_Info.Handle:文件句柄,打断点是正确的,InfoBuf[0]为开辟的内存,显示内存分配成功,nBufBytes为要写入文件的字节数,IoCompletionRoutine为回调函数。有知道错误在哪吗?谢谢

  • 写回答

2条回答 默认 最新

  • 你知我知皆知 2024-07-27 23:32
    关注

    以下回答参考 皆我百晓生券券喵儿 等免费微信小程序相关内容作答,并由本人整理回复。

    在C++中,WriteFileEx 函数的 IoCompletionRoutine 参数是一个指向自定义对象的指针,而不是一个回调函数。因此,在这个函数中,你需要使用 NULL 来表示没有回调函数。

    以下是一个可能的解决方案:

    void* IoCompletionRoutine( void *arg ) {
        return NULL;
    }
    
    OVERLAPPED Overlap[2];
    
    verlap[0].Offset = 0;
    
    Overlap[0].OffsetHigh = 0;
    
    DWORD err = GetLastError();
    theImagesFile_Info.Handle: 文件句柄,打断点是正确的,InfoBuf[0]为开辟的内存,显示内存分配成功,nBufBytes为要写入文件的字节数,IoCompletionRoutine为指向自定义对象的指针。有知道错误在哪吗?谢谢
    

    在这个示例中,我们创建了一个自定义回调函数,并将其传递给 IoCompletionRoutine 参数。这样,即使 IoCompletionRoutineNULL,程序也可以正确地处理异常。

    评论

报告相同问题?