2010-03-31 105 views
0

我的碼具有類似處理refrence的指針/使用SWIG [C++到Java]雙指針

class IExample { ~IExample(); //pure virtual methods ...};

一類的接口繼承接口等

class CExample : public IExample { protected: CExample(); //implementation of pure virtual methods ... };

和全球函數來創建這個類的對象 -

createExample(IExample *& obj) { obj = new CExample(); } ;

現在,我嘗試使用痛飲獲取Java API的包裝中,SWIG生成的接口有像construcotr - IExample(long cPtr, boolean cMemoryOwn)和全局函數變爲createExample(IExample obj)

問題是,當我這樣做,

IExample exObject = new IExample(ExampleLibraryJNI.new_plong(), true /*or false*/); ExampleLibrary.createExample(exObject);

createExample(...) C++層的API成功調用,但是,當調用返回到Java層時,cPtr (long)變量不會被更新。理想情況下,這個變量應該包含地址CExample對象。

我在文檔中讀到typemaps可以用來處理輸出參數和指針引用;但是,我無法找出使用類型映射來解決此問題或其他解決方法的適當方法。

請建議如果我做錯了什麼,或者如何在這種情況下使用typemap?

回答

0

我不知道如何用typemaps解決這個問題; Java不支持引用參數,因此轉換將非常複雜。

爲什麼不只是有createExample()返回IExample*?如果您需要返回其他值,我建議您返回std::pair<IExample*,OtherThing>或某種類似的結構類型。