Re[3]: ошибка на InternetReadFile
От: okman Беларусь https://searchinform.ru/
Дата: 07.04.12 10:34
Оценка: 4 (2)
Здравствуйте, Hare76, Вы писали:

H>Код примерно такой (убрал все проверки на ошибки, закрытия функций и т.п.)


Похоже, ошибка вот в этом месте:

        
    for(DWORD i=0; i<dwBuffer; i=i+SystemInfo.dwPageSize)
    {
        bIReadFile=InternetReadFile(hRequest, Buffer, SystemInfo.dwPageSize, &dwNumberOfBytesRead);
        BOOL bWriteFile=WriteFileEx(hFile, Buffer,dwNumberOfBytesRead, &ovl, NULL);
        ovl.Offset+=dwNumberOfBytesRead;
    }        
    return 0;
}


Суть вот в чем — пока выполняется асинхронная операция ввода-вывода (WriteFileEx в данном случае),
структуру OVERLAPPED нельзя трогать.

MSDN:

The OVERLAPPED data structure must remain valid for the duration of the write operation. It should not be a variable that can go out of scope while the write operation is pending completion.


Здесь же она используется в последующих итерациях цикла,
что является известной ошибкой. Выход такой — либо дождаться завершения WriteFileEx, либо
использовать синхронный ввод-вывод.
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.