繁体   English   中英

使用SWIG [C ++到Java]处理对指针/双指针的引用

[英]handling refrence to pointers/double pointers using SWIG [C++ to Java]

我的代码有一个像

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

继承接口的类,例如

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

以及创建此类对象的全局函数-

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

现在,我尝试使用SWIG获取Java API包装器,SWIG生成的接口具有类似IExample(long cPtr, boolean cMemoryOwn)的构造IExample(long cPtr, boolean cMemoryOwn)并且全局函数变为createExample(IExample obj )

问题是我什么时候做

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

成功调用了C ++层的createExample(...) API,但是,当调用返回到Java层时,不会更新cPtr (long)变量。 理想情况下,此变量应包含CExample对象的地址。

我在文档中读到,类型映射也可以用于处理输出参数和指针引用; 但是,我不知道使用类型映射来解决此问题或任何其他解决方法的合适方法。

请建议我是否做错了什么,或者在这种情况下如何使用typemap?

我不知道您将如何使用Typemap解决此问题; Java不支持参考参数,因此转换将非常复杂。

为什么不让createExample()返回IExample* 如果您需要其他值,我建议返回std::pair<IExample*,OtherThing>或某些类似的结构化类型。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM