描述
在打印假脱机程序托管的打印组件(如打印驱动程序或端口监视器)和从组件接收通知的应用程序之间创建通信通道。
C++ 语法
HRESULT CreatePrintAsyncNotifyChannel( __in LPCWSTR pName, __in PrintAsyncNotificationType *pSchema, __in PrintAsyncNotifyUserFilter filter, __in PrintAsyncNotifyConversationStyle directionality, __in IPrintAsyncNotifyCallback *pCallback, __out IPrintAsyncNotifyChannel **ppChannel ); |
PowerBASIC 语法
FUNCTION CreatePrintAsyncNotifyChannel ( _ BYVAL pName AS DWORD, _ BYREF pSchema AS GUID, _ BYVAL filter AS DWORD, _ BYREF directionality AS DWORD, _ BYVAL pCallback AS IPrintAsyncNotifyCallback, _ BYREF ppChannel AS IPrintAsyncNotifyChannel _ ) AS LONG |
参数
pName
[in]指向打印服务器或打印队列名称的指针。
pSchema
[in]指向要在通道中发送的通知类型的数据模式的GUID的指针。
filter
[in]指定是否将通知发送到的值:
| · | 只有作为与打印假脱机程序托管的插件发件人相同的用户运行的应用程序。 |
| · | 更广泛的听力应用程序。 |
directionality
[in]指定通信是双向的还是单向的值。
pCallback
[in]指向侦听应用程序将用于回调Print Spooler托管组件的对象的指针。如果方向性为kUniDirectional,则该值应为NULL。
ppChannel
[out]指向新频道的指针。
返回值
HRESULT: S_OK
严重: SUCCESS
含义:功能已成功完成。
HRESULT: CHANNEL_ALREADY_OPENED
严重: ERROR
含义:频道已经打开。
HRESULT: MAX_CHANNEL_COUNT_EXCEEDED
严重: ERROR
含义:具有指定队列或打印服务器的指定类型的通知的最大侦听应用程序数目已经注册。默认最大值为10,000。
返回值是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
}
PowerBASIC
IF SUCCEEDED(hr) THEN
' // call was successful
END IF
IF FAILED(hr) THEN
' // call failed
END IF
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.
备注
组件只有在打印后台程序的进程中运行时才能打开通道。例如,如果应用程序加载打印机驱动程序,则驱动程序无法打开通道,但打印机后台打印程序中打印机驱动程序可以打开通道。聆听应用程序可以在打印后台处理程序的内部或外部。
关闭频道CloseChannel;但是,在调用CreatePrintAsyncNotifyChannel之后,不能立即调用CloseChannel.
仅致电发布:
1.如果它是较早的AddRef呼叫的显式匹配。
2.如果频道是UniDirectional频道,而您正在放弃在CreatePrintAsyncNotifyChannel的成功呼叫中收到的指针。
3.如果在您创建了双向渠道之后或在执行OnEventNotify和:
a.您没有致电SendNotification或CloseChannel或
b.您没有重试致电SendNotification或CloseChannel失败或
c.在服务器端,您没有重试调用SendNotification成功返回值NO_LISTENER或
d.在客户端,您没有重试调用SendNotification,成功返回值为CHANNEL_ACQUIRED。
引用文件 #INCLUDE Once
WinSpool.inc(包括Windows.inc)


