如何处理来自C++;通过SWIG到Java 我们正在实现一个C++代码包,用于暴露java客户端。我已经看到了,但是这在三个层(C++/SWIG/Java)的编码术语中转换成了什么
如果有人有工作示例或建议,我将不胜感激。既然我已经努力解决了这个问题(从我的个人资料中查看我的博客,它是关于python、SWIG、exceptions和directors的,但应该会有所帮助),让我给你一些建议:如何处理来自C++;通过SWIG到Java 我们正在实现一个C++代码包,用于暴露java客户端。我已经看到了,但是这在三个层(C++/SWIG/Java)的编码术语中转换成了什么,java,c++,exception-handling,java-native-interface,swig,Java,C++,Exception Handling,Java Native Interface,Swig,如果有人有工作示例或建议,我将不胜感激。既然我已经努力解决了这个问题(从我的个人资料中查看我的博客,它是关于python、SWIG、exceptions和directors的,但应该会有所帮助),让我给你一些建议: 不要向C++堆栈发送java异常。它会使你的应用程序崩溃。确保它们都以正确的方式包装。我知道你在问这件事,但你必须把它弄进去。一个遗漏的异常可以将其全部排除 不要尝试将java异常传递到C++堆栈,它们会转换为SigigDistRoad异常或SigigOraceExpExcts。这真
constchar
指针,Java将可以选择对它们进行垃圾收集。这是真实的所有项目,但它是如此容易被忽视的一个,我已经做了,并看到它做了几次了
之后,不要阅读1.1。使用2.0或1.3中的文档。更清楚。另请参见Swig 2.0文档中的本节 <>避免创建一次以上的模式,我创建了一个支持一种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
我非常感谢您的详细反馈。你显然是这个话题的全球专家,恭喜你。@Steve Townsend哈哈,不!我刚刚将SWIG与Python和Java结合使用。我还碰巧写下了我与他人的经历,这样他们就可以受益/分享我的痛苦。不客气!我知道你的问题已经提了几个月了,但我想为未来的读者补充一下。