可以看一下上面自动生成的程序,程序include了jni.h,这个头文件在 $JAVA_HOME下的include文件夹下. 还可以发现生成的函数名是在之前的函数名前面加上了Java_HelloNative。
创新互联是工信部颁发资质IDC服务器商,为用户提供优质的德阳服务器托管服务
对于已生成的.h头文件,C/C++所需要做的,就是把它的各个方法具体的实现。然后编译连接成库文件即可。再把库文件拷贝到JAVA程序的路径下面,就可以用JAVA调用C/C++所实现的功能了。接上例子。
JNI是Java Native Interface的缩写,中文为JAVA本地调用。使用JNI可以很方便的用我们的Java程序调用C/C++程序。
第三步:编写C/C++本地代码,生成动态链接库文件 首先在VC0(当然也可以用其他工具)中创建一个dll工程---Win32 Dynamic-Link Library工程。
java数组传递给jni实际是指针,只是java禁止你直接在jni里对java数组操作,所以在jni需要对java数组转换为jni里可以操作的数组。典型的还有字符串,c struct等。之所以禁止jni直接操作数组可能是jvm在安全等方面的考虑。
因为使用gcc编译得到动态库,在jni调用的时候,某些情况会有异常, 可尝试改用g++。
1、在具体实现的时候,我们只关心两个函数原型和这里JNIEXPORT和JNICALL都是JNI的关键字,表示此函数是要被JNI调用的。而jint是以JNI为中介使JAVA的int类型与本地的int沟通的一种类型,我们可以视而不见,就当做int使用。
2、这里JNIEXPORT和JNICALL都是JNI的关键字,表示此函数是要被JNI调用的。而jint是以JNI为中介使JAVA的int类型与本地的int沟通的一种类型,我们可以视而不见,就当做int使用。
3、要在java中调用c语言的库,需要使用Java提供了JNI。
4、一开始使用JNI时,很容易把对象引用(jobject类型的值)和类引用(jclass类型的值)弄混。对象引用对应的是数组或者java.lang.Object及其子类的对象实例,而类引用对应的是java.lang.Class的实例。
5、0) { fprintf(stderr, Cant create Java VM); exit(1); } (*jvm)-DestroyJavaVM(jvm); fprintf(stdout, Java VM destory.); }为了保证JNI代码的可移植性,建议使用JDK 2的方法来创建虚拟机。
6、JNIEnv* env 通过这个 调用 jmethodID mid=env-GetMethodID 参数列表自己百度下 然后用env-NewObject 调用java的方法。