勇芳软件工作室.汉化:  Printing > Print Spooler API > Asynchronous Printing Notification > Asynchronous Printing Notification Functions >

CreatePrintAsyncNotifyChannel

Previous pageReturn to chapter overviewNext page

描述

 

在打印假脱机程序托管的打印组件(如打印驱动程序或端口监视器)和从组件接收通知的应用程序之间创建通信通道。

 

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.您没有致电SendNotificationCloseChannel

b.您没有重试致电SendNotificationCloseChannel失败或

c.在服务器端,您没有重试调用SendNotification成功返回值NO_LISTENER或

d.在客户端,您没有重试调用SendNotification,成功返回值为CHANNEL_ACQUIRED。

 

引用文件 #INCLUDE Once

 

WinSpool.inc(包括Windows.inc)