我在wininet.dll中的撞车越来越深。它试图读取HTTP_REQUEST_HANDLE_OBJECT::ReleaseConnection中的零内存位置时崩溃了。
这是否是实际DLL中的错误,而不是由于使用不当造成的?
wininet!HTTP_REQUEST_HANDLE_OBJECT::ReleaseConnection+0x60
wininet!HTTP_REQUEST_HANDLE_OBJECT::CloseConnection+0x84
wininet!HTTP_REQUEST_HANDLE_OBJECT::ReadData_Fsm+0x5e8
温妮特!CFsm_ReadData::RunSM+0x2e
温妮特!CFsm::Run+0x39
温妮特!DoFsm+0x25
wininet!HTTP_REQUEST_HANDLE_OBJECT::ReadData+0x38
wininet!HTTP_REQUEST_HANDLE_OBJECT::HttpReadData_Fsm+0x43
温妮特!CFsm_HttpReadData::RunSM+0x2e
温妮特!CFsm::Run+0x39
温妮特!DoFsm+0x25
温妮特!HttpReadData+0x67
温妮特!ReadFile_Fsm+0x2d
温妮特!CFsm_ReadFile::RunSM+0x2b
温妮特!CFsm::Run+0x39
温妮特!DoFsm+0x25
温妮特!InternetReadFile+0x3ca
上下文是我正在尝试下载一个文件。我打电话给你
InternetReadFile (hFile,lpBuffer,dwNumberOfBytesToRead,lpdwNumberOfBytesRead);
hFile HINTERNET句柄看起来很好(值为0x00cc0024,这似乎是合法的),dwNumberOfBytesToRead是20000。
我的缓冲器大小是131000,也可以。
事情是我的代码工作99.9999%的时间!
发布于 2010-08-12 19:58:10
检查lpdwNumberOfBytesRead的使用情况。它应该是
DWORD *lpdwNumberOfBytesRead = &someDWORDsomewhere;
InternetReadFile (..., lpdwNumberOfBytesRead);或
DWORD NumBytes
InternetReadFile (..., &NumBytes);我有一种感觉,您正在执行第一个方法,而没有在有效的地方设置指针变量。
发布于 2010-08-16 20:53:43
我发现问题是在其他线程中调用已经关闭句柄的InternetCloseHandle。通常,这只会返回ERROR_INVALID_HANDLE,但在某些情况下,会导致InternetCloseHandle或本例中的wininet崩溃。
https://stackoverflow.com/questions/3471321
复制相似问题