描述
向一个通信通道的成员提供通知,通知其他成员通道正在关闭。
C++ 语法
HRESULT ChannelClosed( [in] IPrintAsyncNotifyChannel *pChannel, [in] IPrintAsyncNotifyDataObject *pData ); |
PowerBASIC 语法
METHOD ChannelClosed ( _ BYVAL pChannel AS IPrintAsyncNotifyChannel, _ BYVAL pData AS IPrintAsyncNotifyDataObject _ ) AS LONG |
参数
pChannel
[in]指向发送方和侦听器使用的通道的指针。
pData
[in]指向包含通知数据(或响应)及其大小和类型的对象的指针。
返回值
HRESULT: S_OK
严重: SUCCESS
含义:此函数成功完成。
HRESULT: CHANNEL_ALREADY_CLOSED
严重: ERROR
含义:频道已关闭。
返回值是COM错误代码。因为此函数可能会成功完成操作,而是返回除S_OK之外的HRESULT,则应使用SUCCEEDED或FAILED宏来确定调用的成功。要获取函数返回的具体HRESULT,请使用HRESULT_CODE宏。以下代码示例显示了如何使用这些宏。
C++
if (SUCCEEDED(hr)){
//call was successful
}
if (FAILED(hr)) {
// call failed
}
if (FAILED(hr)) {
// call failed
switch (HRESULT_CODE(hr)){
case CHANNEL_CLOSED_BY_ANOTHER_LISTENER:
// some action
break;
case CHANNEL_CLOSED_BY_SAME_LISTENER:
// some action
break;
default:
//default action
break;
}
} else {
//call succeeded
}
if (SUCCEEDED(hr)){
//call was successful
}
if (FAILED(hr)) {
// call failed
}
PowerBASIC++
IF FAILED(hr) THEN
' // call failed
SELECT CASE HRESULT_CODE(hr)
CASE %CHANNEL_CLOSED_BY_ANOTHER_LISTENER
' // some action
CASE %CHANNEL_CLOSED_BY_SAME_LISTENER:
' // some action
CASE ELSE
' // default action
END SELECT
ELSE
' //call succeeded
END IF
有关其他可能的返回值,请参阅PrintAsyncNotifyError.
备注
当打印后台打印程序托管的组件与监听应用程序关闭通信通道时,应在调用注册通知时调用IPrintAsyncNotifyCallback对象提供的IPrintAsyncNotifyCallback对象的方法。如果打印服务器崩溃,打印后台打印程序将尝试调用侦听应用程序提供的IPrintAsyncNotifyCallback对象的IPrintAsyncNotifyCallback方法。它将发送一个类型NOTIFICATION_RELEASE的通知。
如果监听应用程序关闭双向通信通道,则在创建通道时,应调用组件提供的IPrintAsyncNotifyCallback对象的IPrintAsyncNotifyCallback方法。如果侦听应用程序崩溃,打印后台程序将调用由Print Spooler托管的组件提供的IPrintAsyncNotifyCallback对象的OnEventNotify方法。它将发送一个类型NOTIFICATION_RELEASE的通知。


