Bagaimanakah CGO memperoleh pengecualian cuba dan tangkap apabila memanggil perpustakaan SO dinamik C++ dalam proses bahasa GO?

WBOY
Lepaskan: 2024-02-11 15:20:09
ke hadapan
520 orang telah melayarinya

Bagaimanakah CGO memperoleh pengecualian cuba dan tangkap apabila memanggil perpustakaan SO dinamik C++ dalam proses bahasa GO?

editor php Yuzai sedang membangunkan bahasa GO Jika anda ingin mencuba dan menangkap pengecualian apabila CGO memanggil perpustakaan SO dinamik C++, anda boleh mengambil beberapa kaedah. Pertama, anda boleh menggunakan fungsi setjmp dan longjmp dalam kod C++ untuk menangkap dan membuang pengecualian. Kemudian, gunakan pernyataan import "C" CGO dalam kod GO untuk mengimport fungsi C++ dan memanggilnya. Seterusnya, gunakan fungsi tangguh dan pulihkan dalam kod GO untuk menangkap pengecualian yang dilemparkan dalam kod C++ dan mengendalikannya. Melalui kaedah ini, cuba dan tangkap pengecualian boleh diperoleh apabila memanggil perpustakaan SO dinamik C++ dalam proses bahasa GO.

Kandungan soalan

Saya sedang menulis program Go yang saya gunakan cgo untuk memanggil perpustakaan dinamik (`.so) yang ditulis dalam C++ untuk mengendalikan protokol komunikasi. Kod dalam perpustakaan C++ ini mungkin membuang pengecualian, jadi saya menggunakan try-catch untuk menangkap pengecualian dalam kod perpustakaan dan menangguhkan untuk menangkap pengecualian ini dalam kod Go apabila memanggil fungsi C++ perpustakaan.

Tetapi ternyata apabila c++ cuba menangkap pengecualian, kod Go tidak dapat menangkap pengecualian.

Soalan saya ialah bagaimana untuk menangkap pengecualian C++ dalam kod Go yang dilemparkan oleh cgopanggilan ke fungsi C++.

Penyelesaian

Tiada cara untuk melakukan ini secara langsung.

Buat pembalut C/C++ (anda boleh menulisnya "sebaris" dalam kod sumber Go dalam "komen" yang berkaitan dengan cgo 相关的“注释”中),该包装器将调用目标 C++ 函数,但会将调用包装在 try/catch 块中,捕获所有内容(std::exception) yang akan memanggil fungsi C++ sasaran, tetapi bungkus panggilan itu dengan try /catch menyekat, menangkap segala-galanya (std::exception) dan menukar sebarang pengecualian yang ditangkap kepada nilai khas yang dikembalikan daripada panggilan.

Mendapati penjelasan yang baik a> tentang cara melakukan ini, dengan contoh.

Atas ialah kandungan terperinci Bagaimanakah CGO memperoleh pengecualian cuba dan tangkap apabila memanggil perpustakaan SO dinamik C++ dalam proses bahasa GO?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Label berkaitan:
sumber:stackoverflow.com
Kenyataan Laman Web ini
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan
Tentang kita Penafian Sitemap
Laman web PHP Cina:Latihan PHP dalam talian kebajikan awam,Bantu pelajar PHP berkembang dengan cepat!