2012-05-28 44 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 

} 

但是,由於這顯然是一個醜陋的黑客,我強烈建議完全避免它,只需在源代碼發佈中像正常一樣寫類。