共用方式為


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 SUCCESS 語言函式已順利完成。
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;不過,呼叫 CreatePrintAsyncAsyncNotifyChannel 之後,無法立即呼叫 IPrintAsyncNotifyChannel::CloseChannel

僅呼叫 IPrintAsyncNotifyChannel::Release () :

  1. 如果它是與先前的 IPrintAsyncNotifyChannel::AddRef () 呼叫的明確相符專案,則為 。
  2. 如果通道是 UniDirectional 通道,而且您放棄成功呼叫 CreatePrintAsyncNotifyChannel 時收到的指標。
  3. 如果您在建立 BiDirectional 通道之後或在 IPrintNotifyAsyncCallback::OnEventNotify 和的實作中:
    1. 您未呼叫 IPrintAsyncNotifyChannel::SendNotification 或 IPrintAsyncNotifyChannel::CloseChannel OR
    2. 您未重試呼叫失敗 OR 的 IPrintAsyncNotifyChannel::SendNotification 或 IPrintAsyncNotifyChannel::CloseChannel
    3. 在伺服器端,您未重試呼叫成功且傳回值NO_LISTENER OR 的 IPrintAsyncNotifyChannel::SendNotification
    4. 在用戶端上,您未重試對 IPrintAsyncNotifyChannel::SendNotification 的呼叫,其成功傳回值CHANNEL_ACQUIRED。

規格需求

需求
最低支援的用戶端 Windows Vista [僅限傳統型應用程式]
最低支援的伺服器 Windows Server 2008 [僅限傳統型應用程式]
目標平台 Windows
標頭 prnasnot.h
程式庫 Winspool.lib
Dll Spoolss.dll

另請參閱

用戶端模擬

列印多工緩衝處理器 API 函式

列印