WinInet异步。
InternetReadFileExA(hRequest, &inetBuf, IRF_ASYNC, (DWORD_PTR)pHttp) 返回TRUE,但是inetBuf.dwBufferLength == 0,请问可能是什么原因?
不会没有数据的,因为我改成同步后—— hInternet = InternetOpen(HTTP_AGENT_NAME_DEF, INTERNET_OPEN_TYPE_PROXY, param.szProxy, NULL, 0) ,inetBuf.dwBufferLength就有值了,而且数据正常。

解决方案 »

  1.   

    但是返回TRUE哦。。正常应该是返回FALSE,且ERROR_IO_PENDING == GetLastError()。
      

  2.   

    和这个问题倒数2楼的情况是很类似的——
    http://www.codeguru.com/forum/archive/index.php/t-112057.html倒数1楼建议把 InternetReadFileExA 写在回调函数里。但目前没见过这样写的,不希望以这种方式去回避这个问题。。
      

  3.   

    http://www.th7.cn/Article/bc/WP7/201102/20110228203141.html
    看看吧。这个函数只是要求获取数据,返回TRUE表示要求成功,但并不是在这个函数的参数中返回,你是需要定义回调函数的。
      

  4.   

    你好,首先谢谢关注!这个网址就是刚才我找到唯一一个把 InternetReadFileExA 写到回调函数的例子。我觉得,返回TRUE确实表示成功获取数据了,并在函数的第二个参数 LPINTERNET_BUFFERS lpBuffersOut 中返回;只有返回FALSE,并且 ERROR_IO_PENDING == GetLastError() 才需要等待,且要在回调函数里面设置事件对象有信号。我现在好像已经解决问题了,原来我忽略了在每个函数调用之间ResetEvent()貌似这样就会导致 HttpSendRequestA() 还没完成就一下子飞过去从而导致 InternetReadFileExA() 失败?