Tag: struct

JNA:如何处理未知的结构?

如果我没弄错的话, JNA Structure依赖于相应Java类的公共字段来构建结构,这些字段应该扩展Structure 。 我的问题是我需要传递一个事先不知道声明的结构(让我们说它在运行时已知)。 我只有一个Object列表,C库期望它作为(对a)的结构。 我仍然可以使用Structure类,还是必须手工构建Memory对象,处理大小,对齐/打包自己? 例如: /* native code */ typedef struct mystruct { int x; float y; } mystruct; void dosomething(mystruct * s) { s->y += s->x; } 在Java中: … callFunctionWithSt(“dosomething”, new Object[]{Integer.valueOf(2),Float.valueOf(3.0)}); … void callFunctionWithSt(String funcName, Object[] structVals) { NativeLibrary nl = … Pointer arg = … // or Memory … […]

通过JNI将C ++类返回给Java

我目前正在项目中使用C ++和Java,并且我希望能够将包含在C ++中的对象发送到我的Java接口,以便通过GUI修改它,然后用C ++发送修改。 到目前为止,我已经通过JNI接口向Java返回任何内容,int或布尔值。 这次我必须通过界面发送一个对象。 我已经在C ++和Java中提供了类似的类定义。 我想知道如何创建对象,以便我可以在Java中使用它。 在C ++中我有: JNIEXPORT MyObject JNICALL Java_ca_X_Y_Z_C_1getMyObject(JNIEnv* env, jclass, jint number); Java会调用此函数,以便从C ++端获取对象(该对象包含在单例中,可以轻松访问)。 在Java端,我只是简单地调用这个方法, MyObject anObject = C_getMyObject(3); 哪个应该返回我新创建的对象。 当我进行实际调用时,Java当前返回一个UnsatisfiedLinkError。 怎么了?

使用long将指针从JNI传递到Java

我正在尝试将结构作为指针从JNI传递给Java,以便稍后可以将其从Java传递回JNI。 我已经读过这个post: 通过JNI传递C和Java之间的指针 ,但是我没有成功。 我有一个非常复杂的结构: struct myStruct_s myStruct; 从Java,我调用一个JNI函数来初始化结构并返回一个long(指向结构的指针): JNIEXPORT jlong JNICALL Java_example_ExampleJNI_getStruct(JNIEnv *jenv, jclass jcls) { struct myStruct_s mystruct; long *lp = (long*)&myStruct; return lp; } 然后我用一个长的参数调用一个Java方法。 在JNI中,我希望能够使用之前创建的strcuture。 我喜欢这个: JNIEEXPORT jint JNICALL Java_example_ExampleJNI_methode1(JNIEnv *jenv, jclass jcls, jlong jarg) { struct myStruct_s *arg = (struct myStruct_s *)&jarg; … } 好吧它不起作用。 我想我对结构的长期投射是错误的。 我该怎么办? 谢谢。 编辑 :感谢您的提示,这里是工作function […]