欢迎来到天天文库
浏览记录
ID:18855148
大小:44.00 KB
页数:7页
时间:2018-09-20
《java中调用dll动态库的简洁方法.doc》由会员上传分享,免费在线阅读,更多相关内容在教育资源-天天文库。
1、Java中调用dll动态库的简洁方法解压JNative-1.3.2.zip获得三个文件,分别是:JNativeCpp.dll,libJNativeCpp.so,JNative.jar。JNativeCpp.dllWindows下用的,拷到windows/system32目录下; libJNativeCpp.soLinux下使用的; JNative.jar 这是一个扩展包,加载到你的程序中就可以。 一个简单例子importorg.xvolks.jnative.JNative;importorg.x
2、volks.jnative.Type;importorg.xvolks.jnative.exceptions.NativeException;publicclassJNativeTest{publicstaticfinalintmessageBox(intparentHandle,Stringmessage,Stringcaption,intbuttons){//throwsNativeException,IllegalAccessException{JNativen=null;try{n=newJN
3、ative(“User32.dll”,“MessageBoxA”);//“.dll”不用也可以,常量DLL_NAME的值为User32.dll//构造JNative时完成装载User32.dll,并且定位MessageBoxA方法n.setRetVal(Type.INT);//指定返回参数的类型inti=0;n.setParameter(i++,Type.INT,“”+parentHandle);n.setParameter(i++,Type.STRING,message);n.setParamete
4、r(i++,Type.STRING,caption);n.setParameter(i++,Type.INT,“”+buttons);//指定位置上的参数类型和值n.invoke();//调用方法returnInteger.parseInt(n.getRetVal());}catch(Exceptionex){ex.printStackTrace();}finally{if(n!=null)try{n.dispose();}catch(NativeExceptione){//TODOAuto-gene
5、ratedcatchblocke.printStackTrace();}catch(IllegalAccessExceptione){//TODOAuto-generatedcatchblocke.printStackTrace();}//记得释放}return0;}publicstaticvoidmain(String[]args)throwsNativeException,IllegalAccessException{JNativeTest.messageBox(100,“这是使用jnative练
6、习”,“jnativetest”,1);}}关于linux下编译C代码部分说明:对于linux不同版本,可能会导致libJNativeCpp.so不同原带的libJNativeCpp.so是在glic2.4下编译的为了适应glic2.3的情况,重新编译了libJNativeCpp.so,在forgcc3.4.6glibc2.3下。编译办法:在JNative-1.3.2-srcJNativeCppRelease目录下1、备份calls.o和asm_io.o这两个Object文件2、makeclean
7、3、恢复到当前目录calls.o和asm_io.o这两个Object文件4、make目前已经修改了Release目录下的makefile和subdir.mk文件,使得在makeclean的时候不删除calls.o和asm_io.o两个文件附:linux动态库搜索路径:exportLD_LIBRARY_PATH=`pwd`:$LD_LIBRARY_PATHmakefile文件#################################################################
8、################Automatically-generatedfile.Donotedit!################################################################################-include。./makefile.initRM:=rm-rf#Allofthesourcesparticipatinginthebuildaredefinedhere-includes
此文档下载收益归作者所有