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.
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 cgo
Aufruf einer C++-Funktion ausgelöst wird.
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!