Wie erhält CGO Try-and-Catch-Ausnahmen, wenn die dynamische C++-SO-Bibliothek im GO-Sprachprozess aufgerufen wird?

WBOY
Freigeben: 2024-02-11 15:20:09
nach vorne
565 Leute haben es durchsucht

Wie erhält CGO Try-and-Catch-Ausnahmen, wenn die dynamische C++-SO-Bibliothek im GO-Sprachprozess aufgerufen wird?

php-Editor Yu Zai Wenn Sie in der GO-Sprachentwicklung versuchen möchten, Ausnahmen abzufangen, wenn CGO die dynamische C++-SO-Bibliothek aufruft, können Sie einige Methoden verwenden. Erstens können Sie die Funktionen setjmp und longjmp im C++-Code verwenden, um Ausnahmen abzufangen und auszulösen. Verwenden Sie dann die CGO-Importanweisung „C“ im GO-Code, um die C++-Funktion zu importieren und aufzurufen. Als Nächstes verwenden Sie die Funktionen „defer“ und „recover“ im GO-Code, um die im C++-Code ausgelösten Ausnahmen zu erfassen und zu behandeln. Durch diese Methoden können Try-and-Catch-Ausnahmen abgerufen werden, wenn die dynamische C++-SO-Bibliothek im GO-Sprachprozess aufgerufen wird.

Frageninhalt

Ich schreibe ein Go-Programm, in dem ich cgo verwende, um eine in C++ geschriebene dynamische Bibliothek (`.so) aufzurufen, die das Kommunikationsprotokoll verwaltet. Der Code in dieser C++-Bibliothek kann Ausnahmen auslösen, daher verwende ich try-catch, um Ausnahmen im Bibliothekscode abzufangen, und verzögere das Abfangen dieser Ausnahmen im Go-Code, wenn ich die C++-Funktionen der Bibliothek aufrufe.

Aber es stellt sich heraus, dass der Go-Code die Ausnahme nicht abfangen kann, wenn C++ versucht, die Ausnahme abzufangen.

Meine Frage ist, wie man eine C++-Ausnahme in Go-Code abfängt, die durch einen cgoAufruf einer C++-Funktion ausgelöst wird.

Workaround

Es gibt keine Möglichkeit, dies direkt zu tun.

Erstellen Sie einen C/C++-Wrapper (Sie können ihn „inline“ in den Go-Quellcode in den mit cgo 相关的“注释”中),该包装器将调用目标 C++ 函数,但会将调用包装在 try/catch 块中,捕获所有内容(std::exception verknüpften „Kommentar“ schreiben), der die C++-Zielfunktion aufruft, den Aufruf jedoch in try einschließt /catch-Block, fängt alles ab (std::Exception) und konvertiert alle abgefangenen Ausnahmen in spezielle Werte, die vom Aufruf zurückgegeben werden.

Ich habe eine gute Erklärung a> dafür gefunden, wie das geht, mit Beispielen.

Das obige ist der detaillierte Inhalt vonWie erhält CGO Try-and-Catch-Ausnahmen, wenn die dynamische C++-SO-Bibliothek im GO-Sprachprozess aufgerufen wird?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Verwandte Etiketten:
Quelle:stackoverflow.com
Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage