IPrintAsyncNotifyChannel::SendNotification 方法 (prnasnot.h)
從列印後台處理程式所裝載的元件傳送通知給一或多個接聽應用程式,或將來自應用程式的回應傳送回元件。
語法
HRESULT SendNotification(
[in] IPrintAsyncNotifyDataObject *pData
);
參數
[in] pData
通知內容的指標及其大小和類型。
傳回值
HRESULT | 嚴重性 | 意義 |
---|---|---|
S_OK | SUCCESS | 語言函式已順利完成。 |
ASYNC_CALL_ALREADY_PARKED | ERROR | 無法傳送通知,因為收件者尚未取用先前的通知。 |
ASYNC_CALL_IN_PROGRESS | ERROR | 通道正忙於另一個通知或回應。 |
ASYNC_NOTIFICATION_FAILURE | ERROR | 此通道上的接聽程式未設定為接收此通知類型,或配置完成此呼叫所需的資源時發生問題。 |
CHANNEL_ACQUIRED | ERROR | 另一個接聽程式已取得此通道。 未傳送通知。 原始接聽程式將不再收到通知。 |
CHANNEL_ALREADY_CLOSED | ERROR | 無法傳送通知,因為通道在呼叫之前已關閉。 |
CHANNEL_NOT_OPENED | ERROR | 無法傳送通知,因為通道未在此呼叫之前開啟。 |
CHANNEL_WAITING_FOR_CLIENT_NOTIFICATION | ERROR | 無法傳送通知,因為尚未收到對最後一個通知的回應。 |
INVALID_NOTIFICATION_TYPE | ERROR | 指定的通知類型無效。 |
MAX_NOTIFICATION_SIZE_EXCEEDED | ERROR | 已超過通知數據的大小上限。 根據預設,允許的數據大小上限為10 MB。 |
NO_LISTENERS | SUCCESS | 表示沒有已註冊的接聽應用程式。 |
UNIRECTIONAL_NOTIFICATION_LOST | SUCCESS | 一或多個接聽程式未收到此通知,但至少有一個接聽程式收到此通知。 |
傳回值為 COM 錯誤碼。 因為此函式可能會順利完成作業,但傳回S_OK以外的 HRESULT,您應該使用 SUCCEEDED 或 FAILED 宏來判斷呼叫成功。 若要取得函式傳回的特定 HRESULT,請使用 HRESULT_CODE 宏。 下列程式代碼範例示範如何使用這些宏。
如需其他可能的傳回值,請參閱 PrintAsyncNotifyError 。
如需 COM 錯誤碼的詳細資訊,請參閱 錯誤處理。
if (SUCCEEDED(hr)) {
// Call succeeded, check HRESULT value returned
switch (HRESULT_CODE(hr)){
case S_OK:
// Some action
break;
case NO_LISTENERS:
// Some action
break;
case UNIRECTIONAL_NOTIFICATION_LOST:
// Some action
break;
default:
// Default action
break;
}
} else {
// Call failed, check HRESULT value returned
switch (HRESULT_CODE(hr)){
case ASYNC_NOTIFICATION_FAILURE:
// Some action
break;
case CHANNEL_ALREADY_CLOSED:
// Some action
break;
case CHANNEL_NOT_OPENED:
// Some action
break;
//
// ... Test for other error cases
//
default:
// Default action
break;
}
}
備註
如果是單向通道,如果在列印後台處理程序處理先前的 SendNotification 呼叫時進行 SendNotification 呼叫,則列印後台處理程式會將擱置的通知排入佇列。 如果列印後台處理程式所裝載的元件或應用程式呼叫 IPrintAsyncNotifyChannel::CloseChannel,則會捨棄佇列通知。
如果是雙向通道,如果在 Print-Spooler 處理先前的 SendNotification 呼叫時進行 SendNotification 呼叫,則擱置的呼叫將會失敗。 在此情況下,如果呼叫端是列印後台處理程式內的發件者, SendNotification 會傳回CHANNEL_WAITING_FOR_CLIENT_NOTIFICATION。 如果呼叫端是傳送回復的接聽程式, 則 SendNotification 會傳回ASYNC_CALL_IN_PROGRESS。
當相同雙向通道有多個接聽程式存在時,通道上傳送的初始通知將會傳遞至所有接聽程式。 第一個要回復的接聽程式會取得通道。 在取得通道之後呼叫 SendNotification 的接聽程式將會失敗,併發生錯誤CHANNEL_ACQUIRED。
在雙向通道上接收初始通知的接聽程式可能不想要取得通道。 在此情況下,接聽程式可以呼叫 IUnknown::Release 方法。 如果呼叫 SendNotification 或 IPrintAsyncNotifyChannel::CloseChannel 方法,則不需要呼叫 IUnknown::Release 方法。
規格需求
需求 | 值 |
---|---|
最低支援的用戶端 | Windows Vista [僅限傳統型應用程式] |
最低支援的伺服器 | Windows Server 2008 [僅限傳統型應用程式] |
目標平台 | Windows |
標頭 | prnasnot.h |
Dll | Prnasnot.dll |