描述
WinHttpSetStatusCallback函数设置一个回调函数,WinHTTP可以在操作期间进行调用。
C / C ++语法
WINHTTP_STATUS_CALLBACK WinHttpSetStatusCallback( HINTERNET hInternet, WINHTTP_STATUS_CALLBACK lpfnInternetCallback, DWORD dwNotificationFlags, DWORD_PTR dwReserved ); |
PowerBASIC 语法
FUNCTION WinHttpSetStatusCallback ( _ BYVAL hInternet AS DWORD, _ BYVAL lpfnInternetCallback AS DWORD, _ BYVAL dwNotificationFlags AS DWORD, _ BYVAL dwReserved AS DWORD _ ) AS DWORD |
参数
hInternet
[in]HINTERNET要设置回调的句柄。
lpfnInternetCallback
[in]在执行进度时调用回调函数的指针,或返回NULL以删除现有的回调函数。有关回调函数的更多信息,请参阅WINHTTP_STATUS_CALLBACK.
dwNotificationFlags
[in]无符号长整型值,指定用于指示哪些事件激活回调函数的标志。
可能的值是:
WINHTTP_CALLBACK_FLAG_ALL_COMPLETIONS
任何完成通知后激活。该标志指定使用读取或写入操作所需的所有通知。有关完成列表,请参阅WINHTTP_STATUS_CALLBACK.
WINHTTP_CALLBACK_FLAG_ALL_NOTIFICATIONS
任何状态更改通知包括完成时激活。有关通知的列表,请参阅WINHTTP_STATUS_CALLBACK.
WINHTTP_CALLBACK_FLAG_RESOLVE_NAME
开始和完成名称解析时激活。
WINHTTP_CALLBACK_FLAG_CONNECT_TO_SERVER
开始和完成与服务器的连接时激活。
WINHTTP_CALLBACK_FLAG_DETECTING_PROXY
检测代理服务器时激活。
WINHTTP_CALLBACK_FLAG_DATA_AVAILABLE
完成数据查询时激活。
WINHTTP_CALLBACK_FLAG_HEADERS_AVAILABLE
响应头可用于检索时激活。
WINHTTP_CALLBACK_FLAG_READ_COMPLETE
完成数据读取操作后激活。
WINHTTP_CALLBACK_FLAG_REQUEST_ERROR
发生异步错误时激活。
WINHTTP_CALLBACK_FLAG_SEND_REQUEST
开始并完成使用WinHttpSendRequest发送请求头时激活。
WINHTTP_CALLBACK_FLAG_SENDREQUEST_COMPLETE
使用WinHttpSendRequest发送请求标头时激活。
WINHTTP_CALLBACK_FLAG_WRITE_COMPLETE
完成数据后操作后激活。
WINHTTP_CALLBACK_FLAG_RECEIVE_RESPONSE
开始并完成从HTTP服务器接收资源时激活。
WINHTTP_CALLBACK_FLAG_CLOSE_CONNECTION
启动和完成HTTP连接关闭时激活。
WINHTTP_CALLBACK_FLAG_HANDLES
创建或关闭HINTERNET句柄时激活。
WINHTTP_CALLBACK_FLAG_REDIRECT
重定向请求时激活。
WINHTTP_CALLBACK_FLAG_INTERMEDIATE_RESPONSE
从服务器接收中间(100级)状态码消息时,激活。
WINHTTP_CALLBACK_FLAG_SECURE_FAILURE
激活安全连接失败。
dwReserved
[in]保留。必须为NULL。
返回值
如果成功,返回一个指向先前定义的状态回调函数的指针,如果没有以前定义的状态回调函数,返回NULL。如果无法安装回调函数,则返回WINHTTP_INVALID_STATUS_CALLBACK。有关扩展错误信息,请调用GetLastError.返回的错误代码有:
错误代码 |
描述 |
ERROR_WINHTTP_INCORRECT_HANDLE_TYPE |
提供的手柄类型对于此操作是不正确的。 |
ERROR_WINHTTP_INTERNAL_ERROR |
发生内部错误。 |
ERROR_NOT_ENOUGH_MEMORY |
没有足够的内存来完成请求的操作。(Windows错误代码) |
备注
如果在创建请求句柄之前在会话句柄上设置回调,则请求句柄将从其父会话继承回调函数指针。
即使在异步模式下使用WinHTTP(也就是说,当WinHttpOpen中设置了WINHTTP_FLAG_ASYNC)时,此函数将同步运行。返回值表示成功或失败。要获取扩展错误信息,请调用GetLastError.
同步和异步功能都使用回调函数来指示请求的进度,例如解析名称,连接到服务器等等。异步操作需要回调函数。
可以在任何句柄上设置回调函数,并由派生句柄继承。回调函数可以使用WinHttpSetStatusCallback进行更改,前提是不需要使用上一个回调值的挂起请求。但是,更改句柄上的回调函数不会更改派生句柄上的回调,例如WinHttpConnect返回的回调函数。您必须在每个级别更改回调函数。
许多WinHTTP功能在网络上执行多个操作。每次操作都需要时间才能完成,每次操作都会失败。
启动WinHttpSetStatusCallback功能后,可以从WinHTTP中访问回调函数,以监视时间密集的网络操作。
在异步处理结束时,应用程序必须将回调函数设置为NULL。这样可以防止客户端应用程序接收到其他通知;如果未设置为NULL,则客户端应用程序可能会变得不稳定。
以下代码片段显示了将回调函数设置为NULL的推荐方法。
WinHttpSetStatusCallback(hOpen,%NULL,%WINHTTP_CALLBACK_FLAG_ALL_NOTIFICATIONS,%NULL)
但请注意,WinHTTP不会与工作线程同步WinHttpSetStatusCallback.如果应用程序调用{??989796238}时发起另一个线程的回调,即使WinHttpSetStatusCallback成功将回调函数设置为NULL并返回,应用程序仍然会收到回调通知。