CGO在GO语言进程中调用C++动态SO库时如何获取try和catch异常?

问题描述 投票:0回答:1

我正在编写一个Go程序,在这个程序中我使用

cgo
来调用用C++编写的动态库(`.so)来处理通信协议。该 C++ 库中的代码可能会抛出异常,因此我使用 try-catch 来捕获库代码中的异常,并在调用库的 C++ 函数时使用 defer 来捕获 Go 代码中的这些异常。

但事实证明,当c++ try catch 异常时,Go 代码无法捕获异常。

我的问题是如何在 Go 代码中捕获 C++ 异常,该异常通过

cgo
调用抛出 C++ 函数。

go try-catch cgo
1个回答
0
投票

没有办法直接这样做。

创建一个 C/C++ 包装器(您可以将其“内联”写入 Go 源代码中与

cgo
相关的“注释”中),它将调用目标 C++ 函数,但会将调用包装在
try
/ 中
catch
块,捕获所有内容(
std::exception
)并将任何捕获的异常转换为从调用返回的特殊值。

© www.soinside.com 2019 - 2024. All rights reserved.