例外狀況處理 (RPC)
RPC 使用與 Windows API 相同的例外狀況處理方法。
RpcTryFinally / RpcFinally / RpcEndFinally 結構體相當於 Windows try-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 的可移植性,請使用這些頭文件。 如需 RPC 例外狀況處理程式的詳細資訊,請參閱 RpcExceptionFilter、RpcExceptRpcFinally。 如需 Windows 例外狀況處理程式的詳細資訊,請參閱 結構化例外狀況處理。