Tag: swig

如何处理从C ++通过SWIG到Java的exception

我们正在实现一个关于C ++代码的包装器,以便接触Java客户端。 我已经看到了关于exception处理的SWIG文档,但这在三层(C ++ / SWIG / Java)中的编码术语中转化了什么? 如果有人有工作实例或建议,我将不胜感激。

Swig typemap java对象

我试图通过swig为这两个c ++函数生成java绑定 C ++函数 void SetUserData(void* data); void* GetUserData() const; 在java方面,我希望它看起来像这样 setUserData(Object object); getUserData() //return java.lang.Object 我希望void *指针指向我传递给它的任何java对象。 在我的swig文件中,我尝试添加这些行 //swig file %typemap(jstype) void* “java.lang.Object”; %apply Object {void*}; 我收到编译错误:b2Fixture.swig(22):警告453:无法应用(对象)。 没有定义任何类型图。 我不知道如何为此制作打字机。 有任何想法吗?

为通过参数返回的函数创建一个typemap

我正在转换C api> Java,我有以下函数原型。 /* Retrieves an individual field value from the current Line \param reader pointer to Text Reader object. \param field_num relative field [aka column] index: first field has index 0. \param type on completion this variable will contain the value type. \param value on completion this variable will contain the current field value. […]

使用SWIG处理C函数返回Java中结构数组的指针

我想弄清楚需要什么SWIG接口文件更改才能处理getFoo返回一个指向自定义结构数组的指针(sender_id_t)。 没有任何特殊的SWIG接口代码,我只得到Java端的指针。 如何将该指针转换为可循环或迭代的东西(在Java中),以便我可以获取每个sender_id_t id值? 感谢任何建议。 C结构: typedef unsigned char id_v1_t[32]; typedef id_v1_t id_t; %rename (Sample) sender_id_t_; struct sender_id_t_ { id_t id; uint32_t phy_idx; }; Cfunction: //This will return a pointer to an array of sender_id_t data. The number of elements is retrieved from a separate call. sender_id_t* getFoo(resultset_t* resultset); 例外: [exec] test_wrap.c: In function `new_foo_array’: […]

使用Swig将Java对象传递给C ++ …然后返回Java

使用Java,C ++,Swig和Swig的导向器时,我可以将inheritanceC ++类的Java对象传递给C ++。 这很好用。 现在,当我从C ++代码将同一个Java对象传递回Java时,Swig创建了一个新的 Java对象来包装C ++指针。 这个问题是新对象与旧对象的类型不同。 我在Java中inheritance了C ++类,我需要Java对象。 我为什么要这样做? 我有一个Java资源池,C ++代码检查这些资源然后将它们返回到池中。 以下是SSCE: 这是检出资源并返回它的C ++代码: // c_backend.cpp #include “c_backend.h” #include void Server::doSomething( JobPool *jp ) { printf(“In doSomthing\n”); Person *person = jp->hireSomeone(); person->doSomeWorkForMe(3); jp->returnToJobPool(person); printf(“exiting doSomthing\n”); } 这是覆盖C ++类的Java代码: //JavaFrontend.java import java.util.List; import java.util.ArrayList; public class JavaFrontend { static { System.loadLibrary(“CBackend”); } […]

Swig:将返回类型std :: string(二进制)转换为java byte

我的情况是我有一个C ++类(MyClass),其方法具有以下签名: bool getSerialized(const stdString & name, std::string & serialized); 其中name是参数,序列化是out参数。 我通过在’i’文件中创建%extend和%ignore声明来实现它,如下所示: %extend MyClass{ std::string getSerialized(const std::string & name){ std::string res; $self->getSerialized(name, res); return res; }; %rename(“$ignore”, fullname=1) “MyClass::getSerialized”; 所以这个方法可以在Java中使用: MyClass mc = new MyClass(); String res = mc.getSerialized(“test”); 但是现在我遇到了一个问题,序列化的std :: string包含二进制数据,包括’\ 0’字符表示C String的结尾,实际上下面的代码显示了C ++中的问题: std::string s; s.push_back(‘H’); s.push_back(‘o’); s.push_back(0); s.push_back(‘l’); s.push_back(‘a’); std::cout << "Length […]

如何将java函数指针传递给c ++本机代码

我想从java(android)代码调用本机c ++方法,并将java函数作为参数传递,因此我将能够将函数指针保存在c ++代码中,并从本机代码中激活它。 我选择使用匿名类在java中实现函数指针,我从java调用本机函数如下: interface FunctionPtrHelper { bool function(String param); } NativeFunc(param1,param2,new FunctionPtrHelper() { public bool myFunction(String param) { //body of my function }}); 如何让swig / jni知道第3个参数(实际上是一个类)并将其转换为c ++中的函数指针(包含’myFunction’)? 如果不可能,是否有另一种方法将函数指针从java传递给c ++?

如何在swig中使用weak_ptr?

SWIG主页说shared_ptr是专门处理的,但是weak_ptr没有。 这是否意味着weak_ptr支持在SWIG中存在一些错误/问题? 如果可以使用,如何使用它? 任何人都可以提供样品.i代码? 非常感谢。

使用SWIG创建Java共享库时出现SIGSEGV错误

所以,我正在尝试使用SWIG将C库(libnfc)移植到Java。 我已经到了编译共享库的地步,并且基本的“nfc_version()”方法调用将起作用。 但是,调用“nfc_init()”进行设置会导致SIGSEGV错误。 直接调用nfc库很好。 我用来生成共享库的命令: swig -java -I../libnfc/include nfclib.i gcc -c -I/usr/lib/jvm/java-7-openjdk-i386/include/ -I/usr/lib/jvm/java-7-openjdk-i386/include/linux nfclib_wrap.c gcc -shared nfclib_wrap.o ../build/libnfc/libnfc.so libnfc_wrap.so libnfc.i文件: %module nfc %{ #include #include #include %} %include %include %include 即它应该包括libnfc提供的所有方法。 这是我得到的错误日志: http : //openetherpad.org/AyVDsO4XTg 显然,可能无法从我提供的信息中获得特定的解决方案。 但任何有关尝试的事情的建议都会非常感激(我的知识就在这里)。

通过SWIG处理Java中的C ++exception

我正在尝试使用SWIG将C ++类包装到Java类中。 这个C ++类有一个抛出exception的方法。 我有三个目标,目前没有一个目标正在发生,尽管我按照我的理解遵循了手册: 要让Java类在引发C ++的方法上声明throws 获取SWIG生成的Exception类以扩展java.lang.Exception 在生成的SWIG类中重写Exception.getMessage() 。 似乎问题的根源似乎没有应用我的类型typemap ,因为上述情况都不会发生。 我做错了什么? 最小的例子如下。 C ++不必编译,我只对生成的Java感兴趣。 exception的类是无关紧要的,下面的代码使用IOException只是因为文档使用它。 所有代码都是根据以下示例改编的: http://www.swig.org/Doc1.3/Java.html#typemap_attributes http://www.swig.org/Doc1.3/Java.html#exception_typemap C ++头文件(test.h): #include class CustomException { private: std::string message; public: CustomException(const std::string& message) : message(msg) {} ~CustomException() {} std::string what() { return message; } }; class Test { public: Test() {} ~Test() {} void something() […]