Java代码:classDiskInfo{//名字publicStringname;//序列号publicintserial;}//返回一个结构publicnativeDiskInfogetStruct();C/C++方法实现代码如下:#include"stdafx.h"#include
Java代码:
class DiskInfo {
//名字
public String name;
//序列号
publicint serial;
}
//返回一个结构
public native DiskInfo getStruct();
C/C++方法实现代码如下:
#include "stdafx.h"
#include
#include
#include "jni.h"
#include "jni_md.h"
#include "./head/Base.h"
#include "head/wmi.h"
#include "head/com_sundy_jnidemo_ChangeMethodFromJni.h" //通过javah –jni javactransfer 生成
#include
#include "stdlib.h"
#include "string.h"
#pragma comment (lib,"BaseInfo.lib")
#pragma comment (lib,"jvm.lib")
//硬盘信息
struct {
char name[256];
int serial;
}DiskInfo;
//返回一个结构,这里返回一个硬盘信息的简单结构类型
JNIEXPORT jobject JNICALL Java_com_sundy_jnidemo_ChangeMethodFromJni_getStruct
(JNIEnv *env, jobject obj)
{
/**//* 下面为获取到Java中对应的实例类中的变量*/
//获取Java中的实例类
jclass objectClass = (env)->FindClass("com/sundy/jnidemo/DiskInfo");
//获取类中每一个变量的定义
//名字
jfieldID str = (env)->GetFieldID(objectClass,"name","Ljava/lang/String;");
//序列号
jfieldID ival = (env)->GetFieldID(objectClass,"serial","I");
//给每一个实例的变量付值
(env)->SetObjectField(obj,str,(env)->NewStringUTF("my name is D:"));
(env)->SetShortField(obj,ival,10);
return obj;
}
##############问题:
1、
#include "./head/Base.h"
#include "head/wmi.h"
Base.h和wmi.h 在哪里的、从哪里来的、为什么要有他????
2、
#pragma comment (lib,"BaseInfo.lib")
#pragma comment (lib,"jvm.lib")
BaseInfo.lib和jvm.lib在计算机哪里?。怎么来的?。。。以及这两句的意思???
这个例子我还是没有跑起来!!!!!,,,估计是上面的问题。。。。
谢谢了。。。。。。。。。
JNI传参为结构体的 这个问题还是不太懂,,,,,,
Java代码中的结构体(类)DiskInfo和C++中的结构体是怎么对应的????
在C++中重新写的那个结构体DiskInfo我感觉好像没什么用处啊。。。。。
在C++中重新写的那个结构体DiskInfo:
struct {
char name[256];
int serial;
}DiskInfo;
有用吗??????????
那他是怎么和Java中的结构体相对应的????????
展开