2012-05-25 46 views
0

我有一個C++類,我用swig把它包裝到java中。我想擴展或添加一個新的成員函數到這個類,但我也想用我自己的jni函數作爲這個新的成員函數,或者讓我自己的jni函數在這個新的成員函數中被調用。我怎麼能在swig中做到這一點?我知道%native,但它似乎只生成靜態方法,但我希望它生成對象方法。在swig中,如何在課堂中使用我自己的jni函數?

+0

你真的需要使用JNI函數嗎? '%extend'通常是這樣做的方法。你總是可以編寫額外的調用靜態JNI函數的javacode。 – Flexo

+0

問題是我想讓我的客戶使用我的課程。並調用其必須使用我自己的JNI函數的成員函數。 %擴展是不夠的。我怎麼能在swig中做到這一點? – xichblueagle

+0

讓我問你一個問題:你需要SWIG嗎?通過[JavaCPP](http://code.google.com/p/javacpp/),我們可以使用'@ Raw'註釋輕鬆地將Java引用傳遞給C++成員函數。 –

回答

0

如果你只是想在代理類的一個堅持一個額外的native方法,你可以做到這一點的東西,如:

%module test; 

%typemap(javacode) foo %{ 
    public void native HandRolled(); 
%} 

struct foo { 
    void bar(); 
}; 

void test(foo& f); 

個人但如果你有很多的,你不要」原生代碼要直接使用%native我傾向於將它們分成不同的類,即您將SWIG生成的部分和手冊中的JNI部分作爲不同的項目。然後,您可以使用typemaps將純JNI零件「按摩」到適當的SWIG生成零件中。

相關問題