2012-05-28 38 views
1

我正在使用SWIG为我的DLL生成Java JNI包装。SWIG:生成额外的(手动)Java类

作为它的一部分,我想生成一个自定义异常类,但我想为自己的异常类提供完整的Java类实现。

我当然可以将我的Java类放在一个单独的文件中,但是可以将这样一个手动滚动的Java类嵌入到SWIG脚本中吗?

回答

1

除非这个类是某种类的内部类,否则你几乎已经把它作为一个单独的文件写下来了,因为这就是编译Java时需要的东西。

我稍微感到困惑,为什么你会想,虽然写自己的纯Java异常类 - 正常的事情与SWIG将不会发生任何std::exception得出,即使是通过%inline指令和合并C++的异常层次结构Java自然而然地免费。

有一个解决办法,如果你真的想你可以使用(虽然我个人neverdo它)来从SWIG接口虽然是纯Java类:

%module test 

%nodefaultctor MyException; 
%typemap(javabody) MyException %{ 
    // Java stuff goes here (or in javacode typemap) 
%} 
%typemap(javafinalize) MyException "" 
%typemap(javadestruct) MyException "" 

struct MyException {}; 

产生:

public class MyException { 
    // stuff goes here 

} 

但是,由于这显然是一个丑陋的黑客,我强烈建议完全避免它,只需在源代码发布中像正常一样写类。