Java调用动态库一、使用JNI使用环境VS2008eclipse参照在VS2008编写测试动态库,后面的Jnative也使用这个动态库新建工程选择Win32项目,填写工程名:testDll点选DLL点击完成生成项目目录结构如下:打开testDll.h添加方法说明TEST_API是上面定义的宏,接下来是返回值,方面名,(参数类型列表)在testDll.cpp中写方法实现。在stdafx.h中添加testDll.h的include;按道理说我们的这个dll已经完成了,但是一般c/cpp给接口SDK的时候大都给.h和.lib,为了一步生成dll和lib,我们添加进一个testDll.def,有了这个文件就可以一步生成dll和lib。右击项目名,添加新建项OK,然后就可以生成dll和lib文件把test.dll文件放到java.library.path中2.编写java代码,调用dll库打开eclipse,编写如下代码,然后打开命令行:进入工程目录下的bin文件夹下,javahjin.test.TestJNI生成头文件,打开bin文件夹就可以看到生成的.h文件头文件自动生成里面的代码不要改动3.生成java可以调用的dll动态库把%JAVA_HOME%\include\jni.h和%JAVA_HOME%\include\win32\jni_md.h复制到VS安装目录\VC\include里。在VS2008中新建一个动态库项目,和第一步一样,然后把java生成的头文件(jin_test_TestJNI.h)添加到动态库工程中,(我是新建一个新的头文件然后再把代码复制过去的。)如下:在stadafx.h文件中测试dll文件的头文件,和javah生成的头文件,注:头文件的include中不可以出现空格等字符,不然会报错,在jniDll.cpp中添加文件中代码的实现,方法名,javah中生成的方法,add方法是在testDll动态库中的方法,右键项目,添加附加依赖项,这个目录应该也不能出现空格。点击生成解决方案就可以生成可供java调用的dll文件了,把这个dll文件同样放到java.library.path中。在eclipse中编写测试代码测试成功。JNI中java类型与C/C++类型对应关系:二、使用JNative.jar调用动态库下载JNative.jar文件,导入classPath编写测试类,运行:(由于已经把testDll.dll文件放到java.library.path中,这儿就不重复了。)完工。在使用原生态JNI时需要自己编写从需要调用的dll库到JNI可以认识的dll的一个过程,而,JNative可以直接转换,而且数据类型对应也没有那么复杂。网上说执行效率会有影响。经过测试:JNI用时0msJNative用时16ms。JNative对CString类型支持不是很良好,调用CString的方法时,经常会报一些异常,所以我把路径改成的字符指针Dealingwithoutstructures:=10DetectingsystemuserprivilegesonXPOS?: