我们正在 C++ 代码上实现一个包装器以暴露给 Java 客户端。我看过 SWIG documents about exception handling但这在三层(C++/SWIG/Java)的编码术语中意味着什么?
如果有人有工作示例或建议,我将不胜感激。
最佳答案
另请参阅 Swig 2.0 文档中的 Java-specific section on exception handling .
为了避免多次编写该模式,我创建了一个 SWIG 宏来支持抛出一种 C++ 异常的方法——通过捕获它并抛出相应的 Java 异常:
WRAP_THROW_EXCEPTION( myCppDeclaration, com::foo::MyCppExceptionClass,
"com.foo.MyException",
"com/foo/MyException" );
这是宏:
%define WRAP_THROW_EXCEPTION( MATCH, CPPTYPE, JTYPE, JNITYPE )
%javaexception(JTYPE) MATCH {
try {
$action
}
catch ( CPPTYPE & e ) {
jclass eclass = jenv->FindClass(JNITYPE);
if ( eclass ) {
jenv->ThrowNew( eclass, e.what() );
}
}
}
%enddef
关于java - 如何通过 SWIG 处理从 C++ 到 Java 的异常,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3808778/