windows下如何使用JNI调用C C++函数

来源:互联网 发布:南京行知基地住宿条件 编辑:程序博客网 时间:2024/05/17 23:17

1、首先创建java文件Test.java,内容如下:

package com.jni;
publicclassTest {
static { //静态代码块,在JVM加载类的时候执行
System.loadLibrary("Helloworld");
//Helloworld为C++代码生成的dll文件,注意不加文件格式名
}
publicnativevoid output() ;
//output()方法声明,使用native修饰,这个方法将由C++实现
publicstaticvoid main(Stringargs[]){//正常使用main()方法
Testtest=newTest() ;
test.output();
}
}

这里写图片描述

a)编译Test.java文件,生成Test.class Javac–d . Test.java
//编译生成Test.class到当前目录下,自动生成包com.jni
b)编译Test.class文件,生成com_jni_Test.h文件(com jni为包名)
Javah
若编译不成功,使用完整的编译方法:
这里写图片描述
若还是未成功,请自行查阅javah的使用方法
这里写图片描述
Java文件夹目录:
这里写图片描述

2 创建C++文件Helloworld.cpp,内容如下:

(使用MicrosoftVisual Studio 2010)
新建项目Helloworld
这里写图片描述

选择dll项
这里写图片描述

(3)将2.B生成的com_jni_Test.h文件复制到Projects/Helloworld工程存放头文件的文件夹
这里写图片描述
(3)将头文件com_jni_Test.h包含进Helloworld.cpp
这里写图片描述

(4)继续将jni.h和jni_md.h头文件包含进Helloworld.cpp,这两个头文件位于JDK\inlude文件夹下方法如下

a.右键点击项目名,属性
这里写图片描述

b.选择VC++目录—〉包含目录—〉编辑
这里写图片描述

c.添加..jdk\include文件夹和..jdk\include\win32文件夹
这里写图片描述
这里写图片描述
这里写图片描述

d.包含成功后,打开com_jni_Test.h文件,将内容复制到Helloworld.cpp文件中,

注意把冒号删除。
这里写图片描述

Helloworld.cpp代码:

#include"stdafx.h"      #include"com_jni_Test.h"//将2.B生成的com_jni_Test.h文件复制到Projects/Helloworld工程存放头文件的文件夹#include<jni.h>//将jdk\include\jni.h复制到Projects/Helloworld工程存放头文件的文件夹#include<stdio.h>JNIEXPORTvoidJNICALL Java_com_jni_Test_output(JNIEnv *, jobject){ printf("Hello world") ;}

A.编译生成Helloworld.dll文件
这里写图片描述

B.将Helloworld.dll复制到..jdk\bin目录下
这里写图片描述

C.执行javac com.jni.Test,屏幕输出Helloworld,成功!
这里写图片描述

以上操作基于Windows XP,如使用其他操作系统可能会出现dll不兼容问题。使用Microsoft Visual Studio 2010 生成的dll文件为32位的要使用32位的JDK。

0 0