扫二维码与项目经理沟通
我们在微信上24小时期待你的声音
解答本文疑问/技术咨询/运营咨询/技术建议/互联网交流
那是动态链接库用C#可打包成dll文件
站在用户的角度思考问题,与客户深入沟通,找到保靖网站设计与保靖网站推广的解决方案,凭借多年的经验,让设计与互联网技术结合,创造个性化、用户体验好的作品,建站类型包括:网站设计制作、成都网站建设、企业官网、英文网站、手机端网站、网站推广、域名申请、网站空间、企业邮箱。业务覆盖保靖地区。
java只可以打包成.jar文件 功能和.dll文件一样
1
首先要安装好Visual Studio 2010 (其他版本也行)以及JDK(别忘了配置环境变量),然后安装Eclipse。以上软件安装可自行百度,有很多资料。
2
进入正题,首先在Eclipse中新建工程,File-New-Java Project
3
然后右击DllTest,New-package,再右击src目录下的com包,New-Class。这样我们的Java项目就建好了。
4
再
建好的类文件Dlltest.java里添加代码。主要是导入dll文件的loadlibrary函数和要调用的函数声明shanfei。代码详
见
END
编译Java工程并生成VC要用到的头文件
1
现
在打开cmd,先进到当前java文件所在的目录,用cd xxx\xxx
命令即可,返回上一级目录用cd..命令(注意后面的俩点)。到当前目录,也就是com文件夹下,输入javac Dlltest.java
指令编译java文件生成Dlltest.class文件,就在com文件夹下。
2
之
后再回到上级目录,就是com文件夹的上一层src目录(cd..命令),执行javah命令生成头文件(头文件DllTest.h就在com的上层文件
夹src中),此处一定注意执行javah命令(javah -classpath . -jni
com.DllTest,注意点两边的空格)的目录,目录错误就会报错(如上图所示)。
END
建立VC++工程,生成dll文件
1
打开Visual Studio 2010,新建项目,选择win32项目
2
下一步,选择,dll项目,勾选空项目,点击完成,一个空的dll项目就建好了。
3
还记得之前java项目中生成的DllTest.h文件吗?它就是Java为C++项目指定的头文件,java生成头文件,c++里只需要将头文件里声明的函数实现就好了。首先把头文件复制到C++项目的目录下并导入到解决方案的头文件目录下。
4
新建一个cpp文件,文件名最好与头文件一致(不一样也可以),在这个cpp文件中我们要实现头文件中的函数,需要注意的是函数头必须跟DllTest.h中的一样,不能出错。加完代码,会发现包含的头文件jni.h和jni_md.h出错了,下一步就来解决它。
5
这
个cpp文件中需要包含两个java安装目录下的头文件:jni.h和jni_md.h,分别位于java安装目录下的include文件夹和
include里的win32文件夹内。找到这两个文件,复制到Visual Studio VC 2010
的头文件包含目录中(我的是MicroSoft Visual Studio
10.0\VC\Include,如图)。当然也可以把头文件之直接复制到当前项目的目录下(记得把代码改为#include
“jni.h”),但是这样每次新建项目都得复制粘贴。
6
复制完之后头文件如果还报错,就检查一下VS的包含目录,确认你把头文件复制到VS的默认包含目录中。属性管理器-Debug-User-通用属性-VC++目录-包含目录(include),添加刚才放置头文件的目录即可。
7
解决了上述问题,就可以尝试编译项目生成dll文件了,在debug或release模式下点击生成解决方案,生成成功后到项目目录的debug或release目录下找到相应的dll文件。
END
在Java中调用c++生成的dll文件
1
生成了dll文件,终于到了最后一步。把生成的dll文件复制到Java项目的目录下,注意不是放在com文件夹,也不是src文件夹,是DllTest文件夹内,跟src同级,否则会报错。
2
还有一点需要注意的是,在Java文件内用LoadLibrary函数调用的库名必须与Dll文件名一致,而不是跟java类名一致,这点可以参考java 部分的代码。确认完上述问题,点击运行,稍等片刻就可以看到运行结果,javadll之旅到此结束。
你是指使用动态链接吗?这个可以用java中的反射机制做到,但是java中是没有动态链接库这种东西的。如果你指的是java调用本地dll的话,是使用jni技术,dll也不是java编写的。总是java是不可能编译成为dll。有一种这种的方案,就是将java编译的文件转换为c#的,微软有相应的工具,可以搜到,然后就可以打包成为dll了。
不能,Java是一种虚拟机型语言,而DLL的二进制机器码
不过现在有软件能把Java的Class编译成DLL文件和EXE文件
我们在微信上24小时期待你的声音
解答本文疑问/技术咨询/运营咨询/技术建议/互联网交流