JAVA调用C语言的dll库(使用Dev C++创建Dll)

JAVA调用Dll,这里用JNI(JAVA NATIVE INTERFACE)实现,关于JNI不多解释,此例子用文本编辑器写。

我们在D盘下创建一个文件夹jcode,代码就写在里面。

JNI技术在JAVA架构中的位置如下图示:


1、实现步骤

1)创建一个java类

2)用javac编译成class

3)用javah编译class生成.h文件

4)使用.h文件创建dll

5)执行.clss

6)完成

1.1创建一个java类

源码DllTest.java
public class DllTest{
	
	static {
		System.loadLibrary("myString");
	}	
	public native void helloWorld();
	public static void main(String[] s){
		DllTest test = new DllTest();
		test.helloWorld();
	}
}

1.2用javac编译成class

将DllTest.java编译成class:

打开cmd,进入D:/jcode,执行javac DllTest.java,如下:


可以看到D:/jcode下生成了DllTest.class文件。

1.3用javah编译class生成.h文件

命令如下:


可以看到D:/jcode下生成了DllTest.h文件。

1.4使用.h文件创建dll

这里使用Dev C++开发工具创建Dll文件。

打开Dev C++,打开File——>New——>Project,如下:


将dll工程保存在d:/jcode下,工程创建初期,有两个文件:dllmain.c和dll.h,dllmain.c是C源程序,dll.h是头文件。下面我们修改者两个文件。

将dll.h里面的内容全部删除,将DllTest.h的内容拷贝进来,此时dll.h的内容如下:

/* DO NOT EDIT THIS FILE - it is machine generated */
#include 
   
   
    
    
/* Header for class DllTest */

#ifndef _Included_DllTest
#define _Included_DllTest
#ifdef __cplusplus
extern "C" {
#endif
/*
 * Class:     DllTest
 * Method:    helloWorld
 * Signature: ()V
 */
JNIEXPORT void JNICALL Java_DllTest_helloWorld(JNIEnv *, jobject);

#ifdef __cplusplus
}
#endif
#endif

   
   

把JNIEXPORT void JNICALL Java_DllTest_helloWorld(JNIEnv *, jobject);的参数去掉

为:JNIEXPORT void JNICALL Java_DllTest_helloWorld();

,此例子不用参数。

将函数原型JNIEXPORT void JNICALL Java_DllTest_helloWorld();拷贝到dllmain.c中,实现如下:

/* Replace "dll.h" with the name of your header */
#include "dll.h"
#include 
   
   
    
    
#include
    
    
     
      
JNIEXPORT void JNICALL Java_DllTest_helloWorld(){
	printf("Hello World ! \n"); 
}
    
    
   
   
编译发现缺少jni.h和jni_md.h头文件,原因是dll.h中用到了jni.h,而jni.h中又用到了jni_md.h。
解决:到java环境下去找这两个文件,拷贝到D:/jcode下。
注意:头文件包含用""而不是<>,如#include"jni.h",“”和<>的区别就是,“”表示当前,当前找不到才去系统include下找,而<>就直接到include下找。
编译通过,会在D:/jcode下生成myStirng.dll文件。

1.5执行.clss

整个例子演示完。

如果还看不明白,下载

2.关于JAVA调用C\C++的文章

IBM :https://www.ibm.com/developerworks/cn/java/jnimthds/



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Hi竹子

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值