Re[4]: ошибка на InternetReadFile
От: Hare76  
Дата: 07.04.12 10:47
Оценка:
Здравствуйте, okman, Вы писали:

O>Здравствуйте, Hare76, Вы писали:


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


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


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


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

O>структуру OVERLAPPED нельзя трогать.

O>MSDN:

O>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.


O>Здесь же она используется в последующих итерациях цикла,

O>что является известной ошибкой. Выход такой — либо дождаться завершения WriteFileEx, либо
O>использовать синхронный ввод-вывод.

Спасибо! Помогло! Как-то даже не подумал...
С меня плюсики
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.