CGO는 GO 언어 프로세스에서 C++ 동적 SO 라이브러리를 호출할 때 어떻게 try 및 catch 예외를 얻습니까?

WBOY
풀어 주다: 2024-02-11 15:20:09
앞으로
467명이 탐색했습니다.

CGO는 GO 언어 프로세스에서 C++ 동적 SO 라이브러리를 호출할 때 어떻게 try 및 catch 예외를 얻습니까?

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 중국어 웹사이트의 기타 관련 기사를 참조하세요!

관련 라벨:
원천:stackoverflow.com
본 웹사이트의 성명
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.
최신 이슈
인기 튜토리얼
더>
최신 다운로드
더>
웹 효과
웹사이트 소스 코드
웹사이트 자료
프론트엔드 템플릿
회사 소개 부인 성명 Sitemap
PHP 중국어 웹사이트:공공복지 온라인 PHP 교육,PHP 학습자의 빠른 성장을 도와주세요!