php 편집자 Yuzai는 GO 언어를 개발 중입니다. CGO가 C++ 동적 SO 라이브러리를 호출할 때 예외를 포착하고 싶다면 몇 가지 방법을 사용할 수 있습니다. 첫째, C++ 코드에서 setjmp 및 longjmp 함수를 사용하여 예외를 포착하고 발생시킬 수 있습니다. 그런 다음 GO 코드에서 CGO의 import "C" 문을 사용하여 C++ 함수를 가져오고 호출합니다. 다음으로 GO 코드의 지연 및 복구 기능을 사용하여 C++ 코드에서 발생한 예외를 캡처하고 처리합니다. 이러한 방법을 통해 GO 언어 프로세스에서 C++ 동적 SO 라이브러리를 호출할 때 try and catch 예외를 얻을 수 있습니다.
통신 프로토콜을 처리하기 위해 C++로 작성된 동적 라이브러리(`.so)를 호출하기 위해 cgo
를 사용하는 Go 프로그램을 작성 중입니다. 이 C++ 라이브러리의 코드는 예외를 발생시킬 수 있으므로 try-catch를 사용하여 라이브러리 코드에서 예외를 포착하고 라이브러리의 C++ 함수를 호출할 때 Go 코드에서 이러한 예외를 포착하도록 연기합니다.
그러나 C++에서 예외를 포착하려고 하면 Go 코드가 예외를 포착할 수 없다는 것이 밝혀졌습니다.
내 질문은 C++ 함수에 대한 cgo
호출에 의해 발생한 Go 코드에서 C++ 예외를 포착하는 방법입니다.
이 작업을 직접 수행할 수 있는 방법은 없습니다.
대상 C++ 함수를 호출하는 C/C++ 래퍼(Go 소스 코드의 cgo
相关的“注释”中),该包装器将调用目标 C++ 函数,但会将调用包装在 try
/catch
块中,捕获所有内容(std::exception
관련 "주석"에 "인라인"으로 작성할 수 있음)를 생성하되 호출을 try
로 래핑합니다. /catch
블록은 모든 것을 포착하고(std::Exception
) 포착된 모든 예외를 호출에서 반환된 특수 값으로 변환합니다.
이를 수행하는 방법에 대한 좋은 설명 a>을 예와 함께 찾았습니다.
위 내용은 CGO는 GO 언어 프로세스에서 C++ 동적 SO 라이브러리를 호출할 때 어떻게 try 및 catch 예외를 얻습니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!