Rumah  >  Artikel  >  pembangunan bahagian belakang  >  Bagaimanakah CGO memperoleh pengecualian cuba dan tangkap apabila memanggil perpustakaan SO dinamik C++ dalam proses bahasa GO?

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

WBOY
WBOYke hadapan
2024-02-11 15:20:09567semak imbas

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!

Kenyataan:
Artikel ini dikembalikan pada:stackoverflow.com. Jika ada pelanggaran, sila hubungi admin@php.cn Padam