java - 如何通过 SWIG 处理从 C++ 到 Java 的异常

标签 java c++ exception-handling java-native-interface swig

我们正在 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/

相关文章:

java - 尝试使用资源引入无法访问的字节码

design-patterns - java异常处理策略

java - String.split() 不适用于我搜索逗号分隔项目的正则表达式

java - Jade 行为调度

c++ - 系统时间、本地时间、文件时间和正常时间

c++ - 添加到哈希表

c++ - LLVM 异常;捕获处理程序未处理,未调用清理

Java - 传递接口(interface)类型的ArrayList

java - 检测监听器是否已注册

C++:多态性