勇芳软件工作室.汉化:  WinHTTP Reference > WinHTTP Functions >

WinHttpSetStatusCallback

Previous pageReturn to chapter overviewNext page

描述

 

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并返回,应用程序仍然会收到回调通知。