我们正在实现C ++代码的包装器,以便暴露给Java客户端。我已经看过SWIG documents about exception handling但是这在三层(C ++ / SWIG / Java)中的编码术语中有什么意义呢?
如果有人有工作实例或建议,我将不胜感激。
答案 0 :(得分:8)
另请参阅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
答案 1 :(得分:4)
因为我已经和我搏斗了(从我的个人资料中查看我的博客,它是关于python,SWIG,例外和导演但应该有帮助)让我给你一些建议:
const char
指针,Java将可以选择垃圾收集它们。这对所有项目都是如此,但它是一个容易被忽视的项目,我已经完成了它,已经看过几次了。之后,请不要阅读1.1。使用2.0或1.3中的文档。它更清楚。