How does CGO obtain try and catch exceptions when calling the C++ dynamic SO library in the GO language process?

WBOY
Release: 2024-02-11 15:20:09
forward
468 people have browsed it

How does CGO obtain try and catch exceptions when calling the C++ dynamic SO library in the GO language process?

php editor Yuzai is developing the GO language. If you want to get try and catch exceptions when CGO calls the C dynamic SO library, you can take some methods. First, you can use the setjmp and longjmp functions in C code to catch and throw exceptions. Then, use CGO's import "C" statement in the GO code to import the C function and call it. Next, use the defer and recover functions in the GO code to capture the exceptions thrown in the C code and handle them. Through these methods, try and catch exceptions can be obtained when calling the C dynamic SO library in the GO language process.

Question content

I am writing a Go program, in which I usecgoto call a dynamic library (`.so) written in C to handle communication protocol. The code in this C library may throw exceptions, so I use try-catch to catch exceptions in the library code, and defer to catch these exceptions in the Go code when calling the library's C functions.

But it turns out that when c tries to catch the exception, the Go code cannot catch the exception.

My question is how to catch a C exception in Go code that is thrown by acgocall to a C function.

Solution

This operation cannot be performed directly.

Create a C/C wrapper (you can write it "inline" in the Go source code in a "comment" related tocgo) that will call an objective C function, But will wrap the call in atry/catchblock, catch everything (std::exception) and convert any caught exceptions to be returned from the call special value.

Founda good explanation a> of how to do this, with examples.

The above is the detailed content of How does CGO obtain try and catch exceptions when calling the C++ dynamic SO library in the GO language process?. For more information, please follow other related articles on the PHP Chinese website!

Related labels:
source:stackoverflow.com
Statement of this Website
The content of this article is voluntarily contributed by netizens, and the copyright belongs to the original author. This site does not assume corresponding legal responsibility. If you find any content suspected of plagiarism or infringement, please contact admin@php.cn
Latest Downloads
More>
Web Effects
Website Source Code
Website Materials
Front End Template
About us Disclaimer Sitemap
php.cn:Public welfare online PHP training,Help PHP learners grow quickly!