Ste*_*ehn 6 c java java-native-interface data-structures
从CI开始创建一个用Java加载的DLL.我从java调用一些C函数,并从C调用Java函数(不复杂的数据类型) - 这很好.
我很难将C结构转移到Java.
这是一个描述我想做什么的小例子.它不完整,可能不正确,因为我的问题是我不知道该怎么做.
我的目标是将结构从"StructType"类型从C传递到Java,以便使用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);
}
Run Code Online (Sandbox Code Playgroud)
在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);
}
Run Code Online (Sandbox Code Playgroud)
在此先感谢您的帮助.
斯特芬
我建议返回一个 int 数组,只要你的结构不包含其他任何东西。
至于返回对象:您可以创建一个 StructType 类的对象,用 setter 填充值并返回它。
必要的代码示例可以在这里找到。
只是举个例子,我还没有检查过这段代码。
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);
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
11383 次 |
| 最近记录: |