CreatePrintAsyncNotifyChannel 函数 (prnasnot.h)
在打印后台处理程序托管的打印组件(如打印驱动程序或端口监视器)与从组件接收通知的应用程序之间创建信道。
语法
HRESULT CreatePrintAsyncNotifyChannel(
[in] PCWSTR pszName,
[in] PrintAsyncNotificationType *pNotificationType,
[in] PrintAsyncNotifyUserFilter eUserFilter,
[in] PrintAsyncNotifyConversationStyle eConversationStyle,
[in] IPrintAsyncNotifyCallback *pCallback,
[out] IPrintAsyncNotifyChannel **ppIAsynchNotification
);
参数
[in] pszName
指向打印服务器或打印队列名称的指针。
[in] pNotificationType
指向数据架构 GUID 的指针,用于在通道中发送通知的类型。
[in] eUserFilter
一个值,指定是否将通知发送到:
- 仅以与打印后台处理程序托管的插件发送方相同的用户身份运行的应用程序。
- 一组更广泛的侦听应用程序。
[in] eConversationStyle
一个值,该值指定通信是双向通信还是单向通信。
[in] pCallback
指向对象的指针,侦听应用程序将使用该指针调用打印后台处理程序托管的组件。 如果方向性为 kUniDirectional,则此值应为 NULL。
[out] ppIAsynchNotification
指向新通道的指针。
返回值
HRESULT | 严重性 | 含义 |
---|---|---|
S_OK | 成功 | 函数已成功完成。 |
CHANNEL_ALREADY_OPENED | ERROR | 通道已打开。 |
MAX_CHANNEL_COUNT_EXCEEDED | ERROR | 已向指定的队列或打印服务器注册指定类型的通知的侦听应用程序的最大数目。 默认最大值为 10,000。 |
返回值为 COM 错误代码。 由于此函数可能成功完成操作,但返回除S_OK以外的 HRESULT ,因此应使用 SUCCEEDED 或 FAILED 宏来确定调用是否成功。 若要获取函数返回的特定 HRESULT ,请使用 HRESULT_CODE 宏。
下面的代码示例演示如何使用这些宏来计算返回值。
if (SUCCEEDED(hr)){
//Call was successful
}
if (FAILED(hr)) {
// Call failed
}
if (FAILED(hr)) {
// Call failed
switch (HRESULT_CODE(hr)){
case CHANNEL_ALREADY_OPENED:
// Some action
break;
case MAX_CHANNEL_COUNT_EXCEEDED:
// Some action
break;
default:
//Default action
break;
}
} else {
//call succeeded
}
有关 COM 错误代码的详细信息,请参阅错误处理。
有关其他可能的返回值,请参阅 PrintAsyncNotifyError 。
注解
若要关闭通道,请调用 IPrintAsyncNotifyChannel::CloseChannel;但是, 在调用 CreatePrintAsyncNotifyChannel 后,无法立即调用 IPrintAsyncNotifyChannel::CloseChannel。
仅调用 IPrintAsyncNotifyChannel::Release () :
- 如果它是与早期 IPrintAsyncNotifyChannel::AddRef () 调用的显式匹配项。
- 如果通道是 UniDirectional 通道,并且您放弃在成功调用 CreatePrintAsyncNotifyChannel 时收到的指针。
- 如果在创建双向通道后或在 IPrintNotifyAsyncCallback::OnEventNotify 的实现中和:
- 未调用 IPrintAsyncNotifyChannel::SendNotification 或 IPrintAsyncNotifyChannel::CloseChannel OR
- 未重试调用 IPrintAsyncNotifyChannel::SendNotification 或 IPrintAsyncNotifyChannel::CloseChannel 失败或
- 在服务器端,你没有重试对 IPrintAsyncNotifyChannel::SendNotification 的调用,该调用成功且返回值NO_LISTENER OR
- 在客户端上,你没有重试对 IPrintAsyncNotifyChannel::SendNotification 的调用,该调用成功且返回值CHANNEL_ACQUIRED。
要求
要求 | 值 |
---|---|
最低受支持的客户端 | Windows Vista [仅限桌面应用] |
最低受支持的服务器 | Windows Server 2008 [仅限桌面应用] |
目标平台 | Windows |
标头 | prnasnot.h |
Library | Winspool.lib |
DLL | Spoolss.dll |