如何通过使用JNI来传输C结构到Java?

从CI正在创建这是在Java中加载的DLL。 我从Java调用一些C函数,也从C调用Java函数(蒙山非复杂数据类型) - 这是工作的罚款。

我与C结构转移到Java奋斗。

这里是一个小例子descriping是我想做的事情。 因为我的问题是,我不知道如何做到这一点,是不完整的,也许不是正确的。

我的目标是通过从C到Java的类型“StructType”的结构,才能在Java程序中使用的值。

在C

typedef struct { unsigned char value1; unsigned char value2; } StructType; void passStructToJava(StructType* myStruct) { class cls; jmethodID mid; /* GlobalEnv, GlobalObj are globlal values which are already set */ cls = (*GlobalEnv)->GetObjectClass(GlobalEnv, GlobalObj); mid = (*GlobalEnv)->GetMethodID(GlobalEnv, cls, "receiveStructFromC", "(LPackage/StructType;)V"); (*GlobalEnv)->CallVoidMethod(GlobalEnv, GlobalObj, mid, myStruct); }

在Java

public class StructType { public int value1; /* int because there is no uint8 type */ public int value2; } public StructType mMyStruct; public StructType getMyStruct() { return mMyStruct; } public void setMyStruct(StructType myStruct) { mMyStruct = myStruct; } public void receiveStructFromC(StructType myStruct) { setMyStruct(myStruct); }

在此先感谢您的帮助。
斯特芬

--------------解决方案-------------

检查我的帖子中这样一个问题:通过Java和C之间的数据

我会建议返回一个int数组,至于你的结构不在于别的。

至于返回对象:你可以创建你StructType类的一个对象,以制定者填写的值,并将其返回。

必要的代码示例可以在这里找到。

刚才的例子中,我还没有检查这个代码。

returnObj = (*env)->AllocObject(env, objClass);
if (returnObj == 0) printf("NULL RETURNED in AllocObject()\n");
printf("Sizeof returnObj = %d\n", sizeof(returnObj) );

(*env)->SetObjectField (env, returnObj, fid5,
combinedEmployeeNameJava);
(*env)->SetIntField (env, returnObj, fid6, combinedSalary);

分类:java的 时间:2015-03-15 人气:1
分享到:

相关文章

Copyright (C) 55228885.com, All Rights Reserved.

55228885 版权所有 京ICP备15002868号

processed in 0.321 (s). 10 q(s)