RPC) 例外狀況處理 (
RPC 使用與 Windows API 相同的例外狀況處理方法。
RpcTryFinally RpcFinally / RpcEndFinally / 結構相當於 Windowstry-finally語句。 RPC 例外狀況建構RpcTryExcept RpcExcept / / RpcEndExcept相當於 Windows try-except語句。
當您使用 RPC 例外狀況處理常式時,您的用戶端原始程式碼是可攜式的。 每個平臺提供的不同 RPC 標頭檔會解析每個平臺的 RpcTry 和 RpcExcept 宏。 在 Windows 環境中,這些宏會直接對應至 Windows try-finally 和 try-except 語句。 在其他環境中,這些宏會對應至例外狀況處理常式的其他平臺特定實作。
這些結構所引發的潛在例外狀況包括 RPC 函式傳回的錯誤碼集合,其前置詞RPC_S_和RPC_X,以及 Windows 所傳回的例外狀況集合。 如需詳細資訊,請參閱 RPC 傳回值。
雖然 RpcTry 和 RpcExcept 宏提供可自訂的平臺無關的方式來處理例外狀況,但 Windows Vista 和更新版本的 Windows 中 ,RpcExceptionFilter 是處理例外狀況的建議方式。 它不需要撰寫自訂篩選來擷取許多最常見的結構化例外狀況;不過,自訂例外狀況篩選仍需要 RpcExcept。
在伺服器應用程式、伺服器存根和伺服器執行時間程式庫 (傳輸層上方發生的例外狀況) 會傳播至用戶端。 不會從伺服器傳輸層級傳播任何例外狀況。 伺服器常式將錯誤傳回 RPC 執行時間的建議方法是擲回例外狀況。 伺服器常式可以使用任何適合在伺服器常式之間通訊錯誤的方法,但如果發生錯誤而無法執行遠端程式,則應該在清除後和返回 RPC 執行時間之前引發例外狀況,而不是將值傳回只有伺服器常式辨識為錯誤的 RPC。
下圖顯示如何將例外狀況從伺服器傳回至用戶端。
RPC 例外狀況處理常式與 Open Software Foundation-Distributed Computing Environment (OSF-DCE) 例外狀況處理宏 TRY、 FINALLY和 CATCH稍有不同。 各種廠商都提供將 OSF-DCE RPC 函式對應至 Microsoft RPC 函式的檔案,包括TRY、CATCH、CATCH_ALL和ENDTRY。 這些標頭檔也會將RPC_S_* 錯誤碼對應至 OSF-DCE 例外狀況對應專案、rpc_s_*,並將RPC_X_* 錯誤碼對應至 rpc_x_*。 針對 OSF-DCE 可攜性,請使用這些 Include 檔案。 如需 RPC 例外狀況處理常式的詳細資訊,請參閱 RpcExceptionFilter、 RpcExcept、 RpcFinally。 如需 Windows 例外狀況處理常式的詳細資訊,請參閱 結構化例外狀況處理。