关于JNI调用返回结构体的问题

a6812172 2011-12-31 05:28:41
我写出了JAVA和C的代码,都没报错,但是结果就是不出来,以下是代码,求找出哪里出错



package com.sundy.jnidemo;

import android.app.Activity;
import android.os.Bundle;

public class ChangeMethodFromJni extends Activity {
/** Called when the activity is first created. */
@Override

public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
ChangeMethodFromJni changeJni = new ChangeMethodFromJni();
DiskInfo disk = changeJni.getStruct();
System.out.println("name:" + disk.name);
System.out.println("Serial:" + disk.serial);


}
public class DiskInfo {
//名字
public String name;

//序列号
public int serial;
}

public native DiskInfo getStruct();

static {
System.loadLibrary("ChangeMethodFromJni");
}
}









#include "com_sundy_jnidemo_ChangeMethodFromJni.h"
#include "com_sundy_jnidemo_ChangeMethodFromJni_DiskInfo.h"


struct DiskInfo {
char name[256];
int serial;
};

char* jstringToWindows( JNIEnv *env, jstring jstr );
//将windows类型转换成jstring类型
jstring WindowsTojstring( JNIEnv* env, char* str );


JNIEXPORT jobject JNICALL Java_com_sundy_jnidemo_ChangeMethodFromJni_getStruct
(JNIEnv *env, jobject obj)
{

/**//* 下面为获取到Java中对应的实例类中的变量*/

//获取Java中的实例类
jclass objectClass = (*env)-> FindClass(env,"com/sundy/jnidemo/ChangeMethodFromJni$DiskInfo");

//获取类中每一个变量的定义
//名字
jfieldID str = (*env)-> GetFieldID(env,objectClass,"name","Ljava/lang/String;");
//序列号
jfieldID ival = (*env)-> GetFieldID(env,objectClass,"serial","I");


//给每一个实例的变量付值
(*env)-> SetObjectField(env,obj,str,(*env)-> NewStringUTF(env,"my name is D:"));
(*env)-> SetShortField(env,obj,ival,10);

return obj;
}
...全文
204 回复 打赏 收藏 转发到动态 举报
写回复
用AI写文章
回复
切换为时间正序
请发表友善的回复…
发表回复

58,453

社区成员

发帖
与我相关
我的任务
社区描述
Java Eclipse
社区管理员
  • Eclipse
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧