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

0yg35tkg  于 5个月前  发布在  Go
关注(0)|答案(1)|浏览(57)

我写了一个Go程序,在这个程序中,我使用cgo调用一个C编写的动态库(.so)来处理一个通信协议。该C++库中的代码可能会抛出异常,所以我使用try-catch来捕获库代码中的异常,并且在调用库的C++函数时使用defer来捕获这些异常。 但事实证明,当c++尝试捕获异常时,Go代码无法捕获异常。 我的问题是如何在Go代码中捕获通过cgo`调用抛出C函数的C++异常。

bz4sfanl

bz4sfanl1#

没有办法直接做到这一点。
创建一个C/C++ Package 器(你可以在Go源代码中的cgo相关“注解”中“内联”编写),它将调用目标C++函数,但会将调用 Package 在try/catch块中,捕获所有内容(std::exception)并将任何捕获的异常转换为从调用返回的特殊值。
找到一个good explanation如何做到这一点,与例子。

相关问题