php小編魚仔在GO語言開發(fā)中,如果想要在CGO調(diào)用C++動態(tài)SO庫時(shí)獲取try和catch異常,可以采取一些方法。首先,可以在C++代碼中使用setjmp和longjmp函數(shù)來捕獲和拋出異常。然后,在GO代碼中使用CGO的import “C”語句將C++函數(shù)導(dǎo)入并進(jìn)行調(diào)用。接著,在GO代碼中使用defer和recover函數(shù)來捕獲C++代碼中拋出的異常,并進(jìn)行處理。通過這些方法,可以在GO語言流程中調(diào)用C++動態(tài)SO庫時(shí)獲取try和catch異常。
問題內(nèi)容
我正在編寫一個(gè)Go程序,在這個(gè)程序中我使用cgo來調(diào)用用C++編寫的動態(tài)庫(`.so)來處理通信協(xié)議。該 C++ 庫中的代碼可能會拋出異常,因此我使用 try-catch 來捕獲庫代碼中的異常,并在調(diào)用庫的 C++ 函數(shù)時(shí)使用 defer 在 Go 代碼中捕獲這些異常。
但事實(shí)證明,當(dāng)c++嘗試捕獲異常時(shí),Go代碼無法捕獲異常。
我的問題是如何在Go代碼中捕獲C++異常,該異常通過cgo調(diào)用拋出C++函數(shù)。
解決方法
無法直接執(zhí)行此操作。
創(chuàng)建一個(gè) C/C++ 包裝器(您可以將其“內(nèi)聯(lián)”寫入 Go 源代碼中與 cgo 相關(guān)的“注釋”中),該包裝器將調(diào)用目標(biāo) C++ 函數(shù),但會將調(diào)用包裝在 try/catch 塊中,捕獲所有內(nèi)容(std::exception)并將任何捕獲的異常轉(zhuǎn)換為從調(diào)用返回的特殊值。
找到很好的解釋 a> 如何做到這一點(diǎn),并舉例說明。






