java调用C的dll

早就听说了 jni   可是到现在我才岛鼓出来,是不是很笨.......

好了费话不说了,开始进入正题

1.首先创建一个java类    Hello.java

public class Hello {
    //在静态块里面,把lib.dll导进来,记住不能写.dll的,否则会找不到的
    static
    {
         System.loadLibrary("lib");
    }
    //申明一个本地方法,该本地方法的实现在lib.dll中
    public native static void printString(String str);
    public static void main(String[] args) {
        Hello.printString("Hello");
    }
}

2.用javac编译这个类 : java Hello.java

不清楚的QQ:283066589

用javah对.clss生成C的头文件:javah Hello

现在头文件Hello.h的内容是:

/* DO NOT EDIT THIS FILE - it is machine generated */
#include <jni.h>
/* Header for class Hello */

#ifndef _Included_Hello
#define _Included_Hello
#ifdef __cplusplus
extern "C" {
#endif
/*
 * Class:     Hello
 * Method:    printString
 * Signature: (Ljava/lang/String;)V
 */
JNIEXPORT void JNICALL Java_Hello_printString
  (JNIEnv *, jclass, jstring);

#ifdef __cplusplus
}
#endif
#endif

要提醒大家的是可能jdk的版本不同,生成的头文件可能有点不同,,不过都大同小意,改改就行了,我用的是jdk1.5,根据上面的头文件,改一个.c文件,(现在只把这个.h的文件后辍改成.c就可以,先这么写) 记住最好复制一个,因为这个头文件还有用了,如何改一个.c文件呢?下面我告诉

先打开一个Visual C++,创建一个工程,记住这个工程应该是生成dll的工程,,应该选择Win32 Dynamic-Link Library

工程创建好了,那么把那个.c文件导进来

在导之前先把.c文件复制到工程下

以下是我改的.c文件

/* DO NOT EDIT THIS FILE - it is machine generated */
#include <jni.h>
/* Header for class Hello */

#ifndef _Included_Hello
#define _Included_Hello
#ifdef __cplusplus
extern "C" {
#endif
/*
 * Class:     Hello
 * Method:    printString
 * Signature: (Ljava/lang/String;)V
 */
JNIEXPORT void JNICALL Java_Hello_printString
  (JNIEnv *env, jclass obj, jstring str)
 {
  printf(str);
 }
#ifdef __cplusplus
}
#endif
#endif

这个时候你可能已经发现了  #include <jni.h>
这个头文件,它在哪里了,找到他了,应该入到哪了呢?/

jni.h在jdk1.5目录下的include目录下

那么把它放到visual目录下VC98/include下,编辑文件生成dll

在工程下找到debug 下的dll改名为lib.dll,把这个dll放到jdk1.5的bin目录下

现在用java Hello

就会输出Hello.哈哈,是不是很简单....................

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值