博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Java调用Dll 例子(一)
阅读量:2393 次
发布时间:2019-05-10

本文共 1912 字,大约阅读时间需要 6 分钟。

第一步,编写Java类:

注意,这个类有两个作用,一个是用来做头文件,另外一个作用就是通过它来调用dll

1,Java类

public class TestDll {static    {         System.loadLibrary("DLLSample");//载入dll    }    //用native关键字修饰将被其它语言实现的方法    public native static int DoubleValue(int i);//函数声明    public native static String pirntStr(String msg);//函数声明    public static void main(String[] args){        //本地方法的调用        int rs=DoubleValue(2);        String str=pirntStr("Hello chen!");        System.out.println(str);        System.out.println(rs);    }}

2.编译: javac TestDll

3.生成头文件: javah TestDll。生成TestDll.h

在此注意,要是TestDll类带有包名,比如dcec包,此时的javah改为 javah dcec.TestDll 进行编译。生成的.h文件也会带有包名 : dcec_TestDll.h

第二步:VC制作dll

1,新建win32 Dll项目,一个简单的dll项目即可,DLLSample工程名

2,引入第一步生成的TestDll.h。将此.h文件拷贝到DLLSample目录下。

在FileView标签中,选择Header Files右击,添加Add Files to Folders。

并在StdAfx.h中引入

#include "jni.h"#include "jni_md.h"#include "TestDll.h"

其中,jni.h(这个文件在JDK/include下),jni_md.h(这个文件在jdk/include/win32下)。

此处,有两种方式添加这个两个头文件:

一种是拷贝这两个文件到工程目录下,类似于将TestDll.h的方法。

另一种,在VC中 Tools->Options->Directions添加这个两个文件所在的目录,必须是直接目录,如

C:\PROGRAM FILES\JAVA\JDK1.6.0_33\INCLUDE\WIN32

C:\PROGRAM FILES\JAVA\JDK1.6.0_33\INCLUDE。

3. 实现函数。在DLLSample.cpp中添加如下代码

JNIEXPORT jint JNICALL Java_TestDll_DoubleValue (JNIEnv *, jclass, jint p){    int j = p*2;    return j;}JNIEXPORT jstring JNICALL Java_TestDll_pirntStr(JNIEnv *, jclass, jstring msg){    return msg;}
注意,JNIEXPORT, JNIEnv * ,jclass不要改动。在jint后添加一个自定义的形参p或其他任何变量都可以。

然后实现功能即可。

最后,编译此工程,生成DLLsample.dll文件。

第三步,运行测试

将上述生成的Dllsample.dll文件拷贝包java项目目录下(并非TestDll.class目录下,特别是带有包名的类是,应该放在包的外面),或者到C:\WINDOWS\system32目录下。

结果。。。

===========================================================

说明,以上是在vc++6.0环境下操作。

在VS2008中,采用MFC Dll工程时,注意把jni.h 和jni_md.h拷贝到工程目录下,并将#include "jni.h"  #include "jni_md.h"添加到头文件中,

而非 #include <jni.h>   #include <jni_md.h>,在这里是尖括号和双引号的区别。

而且,在用javah生成的TestDll.h中的include <jni.h>,改为#include "jni.h"。不知为何。估计我的电脑的问题。

如果直接添加目录,我的貌似不起作用。

请测试。。。。

转载地址:http://edgab.baihongyu.com/

你可能感兴趣的文章
poj3904 Sky Code
查看>>
zoj 1745 Are We There Yet?
查看>>
UVA100 The 3n + 1 problem
查看>>
hdu1754 I Hate It
查看>>
hdu 1166 敌兵布阵(求区间的和,单节点更新)
查看>>
hiho一下 第四十四周 题目1 : 博弈游戏·Nim游戏
查看>>
poj2299 Ultra-QuickSort(线段树计数问题)
查看>>
poj3264 Balanced Lineup(求区间的最大值与最小值之差)
查看>>
hdu4565 So Easy!(矩阵快速幂)
查看>>
poj2528 Mayor's posters(线段树,离散化)
查看>>
线段树多lazy-tag(两个)
查看>>
hdu4578(三个更新操作,三个求值操作)
查看>>
并查集(初级)小结
查看>>
Treap
查看>>
相似图片搜索——感知哈希算法
查看>>
编译原理 词法分析
查看>>
计算机系统结构 计算机系统结构的基本概念
查看>>
计算机系统结构 计算机指令集结构
查看>>
计算机系统结构 输入/输出系统
查看>>
信息安全技术及应用 常规加密技术
查看>>