首頁  >  文章  >  後端開發  >  CGO在GO語言流程中呼叫C++動態SO函式庫時如何取得try和catch異常?

CGO在GO語言流程中呼叫C++動態SO函式庫時如何取得try和catch異常?

WBOY
WBOY轉載
2024-02-11 15:20:09552瀏覽

CGO在GO語言流程中呼叫C++動態SO函式庫時如何取得try和catch異常?

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)並將任何捕獲的異常轉換為從呼叫返回的特殊值。

找到很好的解釋 a> 如何做到這一點,並舉例說明。

以上是CGO在GO語言流程中呼叫C++動態SO函式庫時如何取得try和catch異常?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述:
本文轉載於:stackoverflow.com。如有侵權,請聯絡admin@php.cn刪除