Tag: swig

将C ++回调转换为Java

我在C ++(Cocos2d)中有以下代码: typedef void (CCObject::*SEL_CallFunc)(); CCCallFunc * CCCallFunc::actionWithTarget(CCObject* pSelectorTarget, SEL_CallFunc selector) { CCCallFunc *pRet = new CCCallFunc(); if (pRet && pRet->initWithTarget(pSelectorTarget)) { pRet->m_pCallFunc = selector; pRet->autorelease(); return pRet; } CC_SAFE_DELETE(pRet); return NULL; } 使用swig转换为java时,我得到以下内容: public static CCCallFunc actionWithTarget(CCObject pSelectorTarget, SWIGTYPE_m_CCObject__f___void selector) { long cPtr = cocos2dxMappingJNI.CCCallFunc_actionWithTarget(CCObject.getCPtr(pSelectorTarget), pSelectorTarget, SWIGTYPE_m_CCObject__f___void.getCMemberPtr(selector)); return (cPtr == 0) ? null : […]

SWIGTYPE_p_p_:结构指针上的指针(从C / C ++到Java)

我正在使用Swig生成Java类。 我需要处理结构上指针的指针 。 我有这个结构: struct Model { uint32_t serial; } 我在C / C ++中有一个需要包装的函数: void getModel( Model ** model ){ // instructions… } 我得到这个Java类的结果: public class SWIGTYPE_p_p_Model { private long swigCPtr; protected SWIGTYPE_p_p_Model(long cPtr, boolean futureUse) { swigCPtr = cPtr; } protected SWIGTYPE_p_p_Model() { swigCPtr = 0; } protected static long getCPtr(SWIGTYPE_p_p_Model obj) { return […]

使用SWIG将signed char *类型的结构成员转换为Java(byte )中的字节数组

我正在尝试将signed char *类型的结构成员转换为Java中的字节数组。 我有以下结构: typedef struct { signed char * content; int contentLength; } Foo; 我试过这个: %typemap(jni) signed char *content [ANY] “jbyteArray” %typemap(jtype) signed char *content [ANY] “byte[]” %typemap(jstype) signed char *content [ANY] “byte[]” %typemap(javaout) signed char *content [ANY] { return $jnicall; } %typemap(memberin) int contentLength [ANY] { int length=0; $1 = &length; } %typemap(out) […]

使用SWIG从Java访问结构中的指针数组

我有这样的事情: typedef struct { char * content; } Boo; typedef struct { Boo **data; int size; } Foo; 我想将Boo ** data转换为带有Boo Java中Boo元素( Boo[] )的数组。 然后读取数组(我不想编辑,删除并从Java代码创建一个新数组)。 在SWIG文档中描述了如何使用carrays.i和array_functions执行此array_functions ,但struct的成员data必须是Boo*类型。 我的问题有解决方案吗? 编辑:我匆匆忙忙,我忘记写了我想用SWIG生成Java类来与C结构合作。

从OSGi Bundle调用本机方法时出现UnsatisfiedLinkError

我使用eclipse File–>New–>Other–>Plug-in Project创建了一个OSGi插件(Bundle) File–>New–>Other–>Plug-in Project称为插件1.我想在此插件中使用本机.so库。 我在我的插件项目的根目录中添加了libtest_app_wrap1.so 。 我的项目结构如下所示 这是清单文件 Manifest-Version: 1.0 Bundle-ManifestVersion: 2 Bundle-Name: JniTest Bundle-SymbolicName: JniTest Bundle-Version: 1.0.0.qualifier Bundle-Activator: jnitest.Activator Bundle-RequiredExecutionEnvironment: JavaSE-1.8 Import-Package: org.osgi.framework;version=”1.3.0″ Bundle-NativeCode: libtest_app_wrap1.so; osname=linux; processor=amd64 这是我的Activator类的代码 package jnitest; import org.osgi.framework.BundleActivator; import org.osgi.framework.BundleContext; public class Activator implements BundleActivator { public Activator() { System.loadLibrary(“test_app_wrap1”); System.out.println(“Library Loaded Successfully…….”); } /* * (non-Javadoc) * * […]

如何使用swig定义和传递ByteBuffer?

我需要从Java调用C函数。 该函数具有以下API: void convert(char* pchInput, int inputSize, int convertValue, char* pchOutput, int* outputSize); 我正在使用swig来制作包装器。 我读了post: ByteBuffer.allocate()与ByteBuffer.allocateDirect() 最好将结果(pchOutput)创建为DirectByteBuffer 。 如何将Bytebuffer传递给代码c(使用swig) c代码如何从ByteBuffer读取和写入数据? 谢谢

如何在Java中使用SWIG Generated C结构作为通过SWIG / JNI输入C函数

我有一个SWIG接口文件,它将一些C函数(通过JNI)公开给我的Java应用程序,这些C结构用作C函数的输入(通过SWIG / JNI)。 SWIG将结构生成为Java类,但我不确定如何设置结构属性,因为setter采用SWIG生成的类型。 我需要在将结构属性作为输入传递到我的Java类的C函数之前设置它们。 example_location_id_t_是我需要传递的类,但Id和Phy_idx的setter采用以下SWIG类型。 如何填充SWIGTYPE_p_unsigned_char和SWIGTYPE_p_uint32_t以便我可以设置SWIGTYPE_p_uint32_t类的Id和Phy_idx属性? setId(SWIGTYPE_p_unsigned_char value)和setPhy_idx(SWIGTYPE_p_uint32_t value) package com.test.jni; public class SWIGTYPE_p_unsigned_char { private long swigCPtr; protected SWIGTYPE_p_unsigned_char(long cPtr, boolean futureUse) { swigCPtr = cPtr; } protected SWIGTYPE_p_unsigned_char() { swigCPtr = 0; } protected static long getCPtr(SWIGTYPE_p_unsigned_char obj) { return (obj == null) ? 0 : obj.swigCPtr; } } package com.test.jni; public […]

swig c ++ w / Java在多态回调函数上丢失类型

可能重复: SWIG Java保留从C ++反弹的对象的类信息 问题 :为什么我的C ++ swigged对象在传递给Java回调函数时会丢失其类型? 安装程序 :我已经使用Swig Java示例进行回调并添加了一个要传递给回调run(Parent p)的对象run(Parent p) 。 回调按预期工作,但是当我传递一个Child对象时,Java似乎失去了它的类型,并认为它的类型为Parent ,它应该是Child 。 这基于Swig java回调示例 。 系统信息 :Ubuntu 8.04 w / Swig 1.3.33 – 关于最新Swig产生差异的机会我也测试了1.3.39 – 这没有效果。 产出 : bash $ java -Djava.library.path =。 邵仁枚 添加并调用普通的C ++回调 —————————————- 回调::运行(5Child) 回调::〜回调() 添加和调用Java回调 ———————————— JavaCallback.run(家长) 回调::运行(5Child) 回调::〜回调() 正如你在输出中看到的那样 – 对象实际上是Child类型 – 但它的Java类名是Parent – […]

使用SWIG将Java Map 传递给C ++方法

我有一个用C ++定义的方法: std::map validate( std::map key, std::map value ); 我想在Java中使用这个方法。 所以,我必须使用Swig编写一个包装器,通过它我可以将Java Map作为STL map传递给c ++方法。 请告诉我如何为swig定义.i文件以使其工作。

使用SWIG和C ++的std :: map时没有Java的迭代器

我已经在C ++中实现了一个带有std::map的类,并使用SWIG创建了从Java调用的接口。 但是没有迭代器对象允许我遍历SWIG包装的std::map的条目。 有谁知道如何创建迭代器?