Tag: swig

从MATLAB调用Java

我一直在使用Swig为用C ++编写的库创建Java包装器。 包装器生成一个包然后jar 。 文件编译正确并与java完美配合,但我无法从MATLAB中调用它。 我尝试在MATLAB中的静态Java路径文件中添加jar路径,然后调用jar文件中的类,但是我得到错误”Undefined variable or class..”或者如果我尝试使用javaObject(…) “No class * can be located on Java class path” 。 我不确定我做错了什么。 编辑: 为了测试从MATLAB调用c ++库,我创建了一个简单的“数据读取器”类,它包含一个将随机生成的vector< vector >写入文本文件的函数和一个读取它的函数。 生成的swig文件是: SimpleReader.java , DoubleVector.java , exampleJNI.java , example.java , com.example.reader包中的DoubleVector2.java 。 这些被编译并打包到example.jar (生成的库dll也被打包到jar中)。 一切正常,从java调用它所以问题必须特定于MATLAB。 MATLAB没有太多代码,因为似乎没什么用。 我得到了 javaclasspath(‘c:/reader/reader.jar’); obj = com.example.reader.SimpleReader; 此时我得到’Undefined variable “com” or class “com.example.reader.SimpleReader”‘

如何用JNI或JNA阅读窗口标题?

希望重新回到发展空间; 主要使用Java来调用一些原生的win32函数(我不想在.NET中构建)…. 有人能指出我可以使用Java(JNI / JNA / SWIG)从不同的运行窗口读取标题的地方。 假设您将知道您尝试连接的应用程序在内存空间中的位置。

使用swig生成std :: vector到java.util.Vector代码

我尝试用SWIG生成java代码 在MyList.h中,我声明了一个名为_list的自定义列表对象 List _list; 这个List类inheritance自vector class List : public vector 在业务类中(在C ++中),我返回一个自定义对象列表 List getMyList(){ …. return list; } 所以我想生成java代码,我可以将这个C ++ List检索为java.util.List或java.util.Vector。 在我的swig.i文件中,我无法管理如何体现 %typemap(jstype) List “java.util.Vector” namespace std { %template(CustomVector) vector; } 任何类型的帮助如何配置此swig.i模板文件或一些示例代码生成java.util.List / Vector返回函数将不胜感激。 谢谢。

SWIG Java保留从C ++反弹的对象的类信息

好的,我有一个关键词,我故意远离标签和标题。 这是“Android”,但那是因为即使该项目是在Android中,我也不认为我的问题与它有任何关系,我不想吓唬没有Android经验的人。 所以,swig的常见问题。 我在C ++类中有一个虚方法,我通过在类中添加directorfunction使它在Java中可以重载,并且它可以工作。 问题是该方法接收的多态参数也在java端扩展,并且在Java中的虚方法调用期间,该对象带有所有多态信息被剥离。 提出确切的情况; 我正在用C ++编写游戏引擎,我想在Java中愉快地使用它。 游戏引擎有一个GameObject类,它注册CollisionListener ,当碰撞引擎检测到碰撞事件时,它会调用所有已注册的collisionListener的collidedWith(GameObject & collidee)方法,并将它们与它们碰撞的对象一起传递。 class CollisionListener { public: virtual bool collidedWith(GameObject &){}; ~CollisionListener(){} // I know this needs to be virtual but let’s forget about that now }; 我正在使用以下接口文件Bridge.i将此类与GameObject类一起公开给java %module(directors=”1″) Bridge %feature(“director”) CollisionListener; %include “CollisionListener”; %feature(“director”) GameObject; %include “GameObject.h” 现在,当我从java中的CollisionListenerinheritance并重载collidedWith ,它会被一个java端GameObject对象调用。 例如,如果我从java端inheritanceGameObject类并定义一个Bullet类,当这个项目符号与另一个带有监听器的对象collidedWith ,在collidedWith方法调用中,我收到的只是一个裸GameObject (object instanceof Bullet) […]

SWIG接口通过函数参数在Java中接收不透明的结构引用

我正在尝试使用SWIG以便为Android使用Spotify API(libspotify): https : //developer.spotify.com/technologies/libspotify/ 我无法定义SWIG接口文件以便能够成功调用以下本机C函数: sp_error sp_session_create(const sp_session_config * config, sp_session ** sess); 在C中将被称为这样: //config struct defined previously sp_session *sess; sp_session_create(&config, &sess); 但在Java中我需要这样称呼: //config object defined previously sp_session javaSess = new sp_session(); sp_session_create(config, javaSess); sp_session是一个不透明的结构,只在libspotify的API.h文件中定义为: typedef struct sp_session sp_session; 我期待libspotify库创建它并给我一个引用。 我唯一需要参考的是传递给API中的其他函数。 我相信答案在于SWIG界面和打字图,但是我没有成功地尝试应用我在文档中找到的示例 。

SWIG(v1.3.29)生成的C ++到Java Vector类不能正常运行

我有一些本机C ++代码,我正在使用SWIG转换为Java,以便我的Java应用程序可以使用它。 特别是有一些函数返回std :: vector。 这是我的界面文件的片段: %include “std_vector.i” namespace std { %template(Vector) vector; %template(Matrix) vector<vector >; } %include “std_string.i” std_string.i和std_vector.i包含在我正在使用的SWIG构建中。 我的第一个惊喜是Java输出包含了SWIG的“自有”版本的Vector类(而不是使用java.util.Vector )。 我真正的问题是从这些函数返回的Vector似乎不起作用。 例如,我无法使用get() (有时会使程序崩溃)或size()函数返回负值来检索其内容。 我知道Vector包含数据,因为我编写了相同函数的’String’版本,它们简单地遍历Vector (返回原生C ++代码)并以逗号分隔的String值返回内容。 虽然这是一个有效的解决方法,但最终我希望这能够正常工作,因为我能够接收和操作Vectors 。 任何帮助/提示将不胜感激。

将数组作为指针+大小或范围传递给包装函数

给出如下标题: #include #include #include inline void foo(const signed char *arr, size_t sz) { std::copy_n(arr, sz, std::ostream_iterator(std::cout, “\n”)); } inline void bar(const signed char *begin, const signed char *end) { std::copy(begin, end, std::ostream_iterator(std::cout, “\n”)); } (为方便起见,我在这里使用了C ++ 11,如果改变了实现,可以使用C或C ++) 如何将这些函数包装在Java端只接受一个数组,并使用数组的(已知)大小为这些函数提供第二个参数?

使用SWIG生成Java接口

我正在使用SWIG来创建一个C ++库的Java包装器(关于Json(de)序列化)以在Android上使用它。 我在C ++中定义了一个抽象类,表示可以(反)序列化的对象: class IJsonSerializable { public: virtual void serialize(Value &root) = 0; virtual void deserialize(Value &root) = 0; }; 现在,我正在尝试从这个类生成一个Java接口。 这是我的SWIG界面: %module JsonSerializable %{ #include “JsonSerializable.hpp” %} %import “JsonValue.i” class IJsonSerializable { public: virtual void serialize(Value &root) = 0; virtual void deserialize(Value &root) = 0; }; 但是生成的Java代码(显然,因为我无法找到如何告诉SWIG这是一个接口)一个简单的类,有两个方法和一个默认的构造函数/析构函数: public class IJsonSerializable { private long […]