Jni中C++和Java的参数传递
来源:互联网 发布:淘宝店铺规划 编辑:程序博客网 时间:2024/05/21 08:02
转篇文章,这个解决困扰我几天的jni 传递java类做参数的问题
不说废话,直接进入jni之旅把,一下程序在vc+java方式得本地机器上运行通过.
首先调用jni得第一步.
在JAVA程序中,需要在类中声明所调用的库名称,如下:
static
System.loadLibrary(“jnitest”);
}
在这里,库的扩展名字可以不用写出来,究竟是DLL还是SO,由系统自己判断。
其次用native声明本地方法
在这里因为需要,咱们声明如下:
public
public
public
public
otest得定义:
class
public
public
public
}
后编译该JAVA程序文件,生成CLASS,再用JAVAH命令,JNI就会生成C/C++的头文件。
第三,c/c++方面准备得工作.
将jdk安装目录得include目录下得jni.h和win32/jni_md.h拷贝到你c得库函数得目录下.
第四,编写c/c++程序
因为做测试,我得程序如下
//intTest
JNIEXPORT
(JNIEnv
printf("this
return
}
//stringTest
JNIEXPORT
(JNIEnv
//这里解释一点,注意函数名必须对应你javah生产得函数名,helli对应得是java得package,JniTest对应得是使
用这个函数得java累,jclass默认对应得也就是这个类,JNIEnv传递得是一个java得环境,jclass对应得就是函数
名后得JNITest,后面得才是所有本地方法需要传递得数据
//
const
const
printf("this
return
}
//otestTest
JNIEXPORT
(JNIEnv
jclass
//取int
jfieldID
if
int
//取string
jfieldID
if
jstring
const
//取byte[]
jfieldID
if
jbyteArray
jbyte
char
add_0(c,4);//给byte数组加'/0'
printf("receive
//
env->SetIntField(obj,
const
env->SetStaticObjectField(clazz,t,env->NewStringUTF(cc));
arr=(jbyte
env->SetByteArrayRegion(jarr,0,8,arr);
return
}
//bytesTest
JNIEXPORT
(JNIEnv
jbyte
char
add_0(c,len);
printf("%s\n",c);
return
}
//给字符串加\0
void
for
*c++='\0';
}
译连接成库文件,本例是在WINDOWS下做的,生成的是DLL文件。并且名称要与JAVA中需要调用的一致,这里就
是jnitest.dll
个程序,你是否看到了你预期得运行结果?祝你好运.
附录1:类型映射表:
Java类型
boolean
byte
char
short
int
long
float
double
Object
Class
String
Object[]
boolean[]
byte[]
char[]
short[]
int[]
long[]
float[]
double[]
※
附录2:域和方法符号表
Java
boolean
byte
char
short
int
long
float
double
void
objects对象
Arrays数组
methods方法
原文:http://blog.sina.com.cn/s/blog_7eff0c2c0100sov4.html
- Jni中C++和Java的参数传递
- Jni中C++和Java的参数传递
- Jni中C++和Java的参数传递
- Jni中C++和Java的参数传递
- Jni中C++和Java的参数传递
- Chap7:Jni中C++和Java的参数传递
- Jni中C++和Java的参数传递
- Jni中C++和Java的参数传递
- Jni中C++和Java的参数传递
- Jni中C++和Java的参数传递
- Jni中C++和Java的参数传递
- Jni中C++和Java的参数传递
- Jni中C++和Java的参数传递
- Jni中C++和Java的参数传递
- Jni中C++和Java的参数传递
- Jni中C++和Java的参数传递
- Jni中C++和Java的参数传递
- Jni中C++和Java的参数传递
- 丢失grub的安装和修复 mbr 以及制作U盘安装grub
- android 常用对话框 ---转载
- Facestagram: 合体Instagram五个新特性YY
- PAFF 和MBAFF
- C#串口通信编程类(修改版)
- Jni中C++和Java的参数传递
- 鼠标滑过效果
- jQuery学习《六》
- JQuery easyUi datagrid 中 editor 增加自定义事件(1)
- php读取xml文件
- 浅谈partial class(局部类)
- USB 基本知识
- 一个让我感触很深的求职故事,“请给我一次机会,让我成就你”
- java操作txt文件