如何用java调用c语言写的函数?

好像有种用dll文件的方法?有没有详细过程?给个靠谱点的博文也行... 好像有种用dll文件的方法?
有没有详细过程?给个靠谱点的博文也行
展开
 我来答
870177103
推荐于2016-08-06 · TA获得超过522个赞
知道小有建树答主
回答量:486
采纳率:0%
帮助的人:350万
展开全部
我知道的有两种方法,一种是直接用JNI,另一种是则是用Jacob(实质上也用的是JNI)
先讲讲第一种方法
1.编写Java程序TestDll,注意,这个类有两个作用,一个是用来做头文件,另外一个作用就是通过它来调用dll
public class TestDll {
static
{
System.loadLibrary("DLLSample");//载入dll
}
public native static int DoubleValue(int i);//函数声明
}
2.编译: javac TestDll
3.生成头文件: javah TestDll
生成TestDll.h文件,这里面只对函数DoubleValue作了声明
/* DO NOT EDIT THIS FILE - it is machine generated */
#include <jni.h>
/* Header for class TestDll */
#ifndef _Included_TestDll
#define _Included_TestDll
#ifdef __cplusplus
extern "C" {
#endif
/*
* Class: TestDll
* Method: DoubleValue
* Signature: (I)I
*/
JNIEXPORT jint JNICALL Java_TestDll_DoubleValue
(JNIEnv *, jclass, jint);
#ifdef __cplusplus
}
#endif
#endif

4.用VC制作DLL
修改DLLSample工程,程序中添加函数DoubleValue的实现,函数名必须用jni规定格式,可以照到.h文件里的声
明来写:
#include "jni_md.h"
#include "TestDll.h"
JNIEXPORT jint JNICALL Java_TestDll_DoubleValue (JNIEnv *, jclass, jint p)
{
int j = p*2;
return j;

JNIEXPORT,JNICALL,JNIEnv *, jclass请都不要动,jint对应是java里的int
别忘了把TestDll.h,jni.h(这个文件在JDK/include下),jni_md.h(这个文件在jdk/include/win32下)复制到VC
工程目录中,然后编译生成dll
5.把生成的DLLSample.dll复制到jdk/bin下(确保PATH指向了这个目录)
6.应用
我看到他们举的例子都是把调用写在了main里, 在这里我把应用取出来放在一个Servlet类中的测试的,同样可
以得到正确结果,这里体现国TestDll的第二个作用,它是调用dll的一个纽带
......
TestDll td = new TestDll();
System.out.println("result= " td.DoubleValue(25));
.....

注意:
如果更改了TestDll的内容或重使命名了这个文件,必须重新用它生成头文件,在dll里也要做相应修改,
因为必须要和java里面的声明一致才行

----------------------------------------
本文随写,若有什么错误,请多多指出,谢谢

说明:本文是west263的博文,作者并没有留名
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式