如何在Java中调用dll(一)

2008-02-23 09:29:28来源:互联网 阅读 ()

新老客户大回馈,云服务器低至5折

我知道的有两种方法,一种是直接用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里面的声明一致才行


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

上一篇: 解决 jive 3_1_3 中文问题 (不需要修改代码)
下一篇: document.execComand()参数说明

标签:

版权申明:本站文章部分自网络,如有侵权,请联系:west999com@outlook.com
特别注意:本站所有转载文章言论不代表本站观点,本站所提供的摄影照片,插画,设计作品,如需使用,请与原作者联系,版权归原作者所有

上一篇:关于使用JavaMail发送邮件是需要身份验证的问题

下一篇:document.execComand()参数说明