php小編魚仔在GO語言開發中,如果想要在CGO呼叫C 動態SO函式庫時取得try和catch異常,可以採取一些方法。首先,可以在C 程式碼中使用setjmp和longjmp函數來捕獲和拋出異常。然後,在GO程式碼中使用CGO的import "C"語句將C 函數匯入並進行呼叫。接著,在GO程式碼中使用defer和recover函數來捕捉C 程式碼中拋出的異常,並進行處理。透過這些方法,可以在GO語言流程中呼叫C 動態SO函式庫時取得try和catch異常。
我正在編寫一個Go程序,在這個程序中我使用cgo
來調用用C 編寫的動態庫(`.so)來處理通信協定.該 C 庫中的程式碼可能會拋出異常,因此我使用 try-catch 來捕獲庫程式碼中的異常,並在調用庫的 C 函數時使用 defer 在 Go 程式碼中捕獲這些異常。
但事實證明,當c 嘗試捕獲異常時,Go程式碼無法捕獲異常。
我的問題是如何在Go程式碼中捕獲C 異常,該異常透過cgo
呼叫拋出C 函數。
無法直接執行此操作。
建立一個C/C 包裝器(您可以將其「內聯」寫入Go 原始碼中與cgo
相關的「註解」),該包裝器將呼叫目標C 函數,但會將呼叫包裝在try
/catch
區塊中,捕獲所有內容(std::exception
)並將任何捕獲的異常轉換為從呼叫返回的特殊值。
以上是CGO在GO語言流程中呼叫C++動態SO函式庫時如何取得try和catch異常?的詳細內容。更多資訊請關注PHP中文網其他相關文章!