首頁 > 後端開發 > Golang > 主體

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

WBOY
發布: 2024-02-11 15:20:09
轉載
520 人瀏覽過

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
最新問題
熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板
關於我們 免責聲明 Sitemap
PHP中文網:公益線上PHP培訓,幫助PHP學習者快速成長!