Java调用Dll 例子(一)
2012-11-18 18:23
288 查看
第一步,编写Java类:
注意,这个类有两个作用,一个是用来做头文件,另外一个作用就是通过它来调用dll
1,Java类
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中引入
其中,jni.h(这个文件在JDK/include下),jni_md.h(这个文件在jdk/include/win32下)。
此处,有两种方式添加这个两个头文件:
一种是拷贝这两个文件到工程目录下,类似于将TestDll.h的方法。
另一种,在VC中 Tools->Options->Directions添加这个两个文件所在的目录,必须是直接目录,如
C:\PROGRAM FILES\J***A\JDK1.6.0_33\INCLUDE\WIN32
C:\PROGRAM FILES\J***A\JDK1.6.0_33\INCLUDE。
3. 实现函数。在DLLSample.cpp中添加如下代码
注意,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"。不知为何。估计我的电脑的问题。
如果直接添加目录,我的貌似不起作用。
请测试。。。。
注意,这个类有两个作用,一个是用来做头文件,另外一个作用就是通过它来调用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\J***A\JDK1.6.0_33\INCLUDE\WIN32
C:\PROGRAM FILES\J***A\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"。不知为何。估计我的电脑的问题。
如果直接添加目录,我的貌似不起作用。
请测试。。。。
相关文章推荐
- java调用dll例子
- Java使用JNI调用VC的DLL的一个小例子
- Java调用dll详细例子
- Java调用dll例子,JNative的使用
- JAVA调用DLL简单小例子
- *JAVA调用DLL简单小例子*
- 【转载整理】eclipse 开发c/c++、Java使用JNI调用C程序、生成64位dll动态链接库
- 关于vs2010下编译dll动态库,JNA接口在java中调用的问题
- java调用C/C++写的库函数 dll
- 使用dll以及调用dll例子
- JAVA调用C语言的dll库(使用Dev C++创建Dll)
- Chap5:使用JNI技术实现java程序调用第三方dll(c/c++)文件的功能
- Java调用LDAP认证的例子
- Eclipse、MinGW、JNI编写C++生成dll, Java端调用的完整示例(附java.lang.UnsatisfiedLinkError解决方法)
- JAVA调用ORACLE的存储过程、函数的返回结果集例子
- JNA:JAVA调用DLL 超详细代码实战
- Java Call DLL(compiled by VB) java调用vb生成的dll
- JAVA判断32位还是64位,调用不同的DLL(转)
- ElasticSearch2.3.4之Java Api调用例子
- ABAP--一个极好的调用外部java程序的Search Help Exit的实例(RFC好例子)