Java中调用c语言示例

来源:互联网 发布:人脸识别用什么算法 编辑:程序博客网 时间:2024/05/21 09:10

java中调用c语言,主要是通过JNI(即java native interface)实现的,在windows下调用c语言实现生成的.dll文件来执行;unix/linux下是.so文件。下面讲解实例实现的简单步骤:

1.编写java程序:

public class javatest{
static{
System.loadLibrary("call");
}

public native static int xingxingdeng(int i);
public static void main(String []args){
javatest jc = new javatest();
int j;
j = jc.xingxingdeng(4);
System.out.println(j);
}
}

注意:

i).xingxingdeng()在java中声明时候需要加上native关键字,表示其是需要在c语言中实现的函数;

ii).需要在调用c语言的类中加上这句话

static{
System.loadLibrary("call");
}

其中,call即是需要在c中实现的函数的名字;

2.运行java命令编译:javac javatest.java

3.运行java命令生成头文件:javah javatest

4.利用devc++生成c语言的实现.dll文件,并将其添加到javatest类的路径之下:

devC++生成dll文件步骤:打开devc++ ==> 文件 ==>新建 ==> 项目 ==> 选择DLL ==>添加项目名字(call)==>确定

此处call里面会有两个文件,一个是dllmain.cpp,一个是dll.h,我们需要编写的就是dllmain.cpp文件;

打开第3步中生成的头文件javatest.h,可以看到里面extern "c"{}中有函数的声明,此函数即是需要在dllmain.cpp中实现,拷贝到dllmain.cpp中进行实现即可

另外,需要在dllmain.cpp中加入3中生成的头文件,实现如下:

#include "javatest.h"


JNIEXPORT jint JNICALL Java_javatest_xingxingdeng(JNIEnv *, jclass, jint p)
{
int j = p*p;
return j;
}

5.编译即可,编译时候可能会报错告诉你缺少两个头文件,需要将其拷贝到当前路径之下,这两个头文件是:

jni.h ,位于jdk下的include目录中

jni_md.h,位于jdk下的include/win32目录中

至此,编译生成在当前目录下存在的call.dll文件

6.java调用命令之后会自动调用call.dll文件:java javatest即可看到结果。

0 0
原创粉丝点击