java中如何调用c_java中如何调用c函数

这篇博客介绍了如何在Java中通过JNI调用C函数的步骤,包括编写Java文件、生成头文件、实现C函数、创建动态库以及解决可能出现的问题。提供了具体的示例代码和注意事项。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

先介绍一下jni:Java Native Interface,它能够使java和其他编程语言编写的应用程序和库进行相互操作。

java中调用c函数,主要是通过本地化接口jni来实现的,在windows下,调用的是dll文件,在unix下,调用的是so文件。这里先介绍编写调用c函数的基本步骤:

(1):编写.java文件,其中c中的函数要用public native static修饰。

(2):编译.java文件为.class文件,使用javah生成.h文件。

(3):按照.h文件中的函数形式在c中实现函数。

(4):生成.dll文件,拷贝到java工程中。

(5):运行java文件。

注意以下几点:(1)如果java源文件放在包中,一定要在工程目录下使用javah命令。(2)在编写c函数时,要把jni.h和jni_md.h文件放在c的工程中。(3)在java文件中包含如下一句:static{System.loadLibrary("")},引号中为生成的动态连接库文件,不用加扩展名,系统会自动识别的。

JAVA调用DLL简单小例子

这个小例子用JNI调用了VC++做的DLL动态库。

1、总体说明:

实现一个函数,传入整形数i,返回值i*i,这个函数做在DLL中,java将通过JNI调用这个函数,传入一个参数,得到返回值。

确定DLL的名称为calldll.dll,函数shanfei(int i)。

2、编写java程序javacall.java,如下:

public class javacall

{

static

{

System.loadLibrary("calldll");

}

public native static int shanfei(int i);

public static void main(String[] args)

{

javacall jc = new javacall();

int j;

j = jc.shanfei(4);

System.out.println(j);

}

}

3、编译

javac javacall.java

4、生成头文件

javah javacall

生成javacall.h文件

5、制作VC++动态库

建立新DLL工程,程序中添加:

#include "javacall.h"

JNIEXPORT jint JNICALL Java_javacall_shanfei (JNIEnv *, jclass, jint p)

{

int j = p*p;

return j;

别忘了将javacall.h复制到VC工程目录中,然后编译,如果编译说找不到jni.h文件,可以将jni.h复制到工程目录中,还可将javacall.h文件中的#include 改为#include "jni.h",再编译。

6、java调用

将生成的calldll.dll文件复制到javacall.java所在的目录中,运行

java javacall,应该可以看到运行结果。

注意可能发生以下几种情况:

1、当你做到第6步时,发现calldll一直不能装载,则将calldll.dll拷贝到windows\system32\ 下即可

2、当找不到jni.h时即提示错误(fatal error C1083: Cannot open include file: 'jni.h': No such file or directory将以下文件:)\jdk\include\jni.h\jdk\

include\win32\jawt_md.h\

jdk\include\win32\jni_md.h

将以上三个文件复制到Visual Studio.net的安装目录下的\Vc7\include目录中

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值