我写了一个Go程序,在这个程序中,我使用cgo调用一个C编写的动态库(.so)来处理一个通信协议。该C++库中的代码可能会抛出异常,所以我使用try-catch来捕获库代码中的异常,并且在调用库的C++函数时使用defer来捕获这些异常。 但事实证明,当c++尝试捕获异常时,Go代码无法捕获异常。 我的问题是如何在Go代码中捕获通过cgo`调用抛出C函数的C++异常。
cgo
.so)来处理一个通信协议。该C++库中的代码可能会抛出异常,所以我使用try-catch来捕获库代码中的异常,并且在调用库的C++函数时使用defer来捕获这些异常。 但事实证明,当c++尝试捕获异常时,Go代码无法捕获异常。 我的问题是如何在Go代码中捕获通过
bz4sfanl1#
没有办法直接做到这一点。创建一个C/C++ Package 器(你可以在Go源代码中的cgo相关“注解”中“内联”编写),它将调用目标C++函数,但会将调用 Package 在try/catch块中,捕获所有内容(std::exception)并将任何捕获的异常转换为从调用返回的特殊值。找到一个good explanation如何做到这一点,与例子。
try
catch
std::exception
1条答案
按热度按时间bz4sfanl1#
没有办法直接做到这一点。
创建一个C/C++ Package 器(你可以在Go源代码中的
cgo
相关“注解”中“内联”编写),它将调用目标C++函数,但会将调用 Package 在try
/catch
块中,捕获所有内容(std::exception
)并将任何捕获的异常转换为从调用返回的特殊值。找到一个good explanation如何做到这一点,与例子。