java jni 结构体_JAVA 的JNI,传参为结构体问题: 我在网上找的资料://返回一个结构 public native DiskInfo getStruct();...

本文探讨了如何在Java和C++通过JNI进行交互,重点讲解了`DiskInfo`结构体在两者之间的映射。作者提问了关于头文件`Base.h`和`wmi.h`的来源,以及`BaseInfo.lib`和`jvm.lib`库的定位。同时,解析了JNI中结构体传递的原理,并质疑了C++中重写结构体 DiskInfo 的必要性。
摘要由CSDN通过智能技术生成

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中的结构体相对应的????????

展开

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值