- 1、本文档共4页,可阅读全部内容。
- 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
jnativa使用
在Java程序中使用JNative调用dll文件?因为项目需求,需要在java中调用dll文件。测试过几种方法,发现还是JNative最为便利。
1.?? 安装
到jnative.sourceforge.net下载最新的JNative二进制包,解压后得到3个文件:JNativeCpp.dll,libJNativeCpp.so,JNative.jar,其中:
JNativeCpp.dll???? 放在windows/system32目录下
libJNativeCpp.so??? linux下使用
JNative.jar????? ??? 导入工程中
2.?? 使用
2.1.???? 加载dll文件
JNative可使用两种方式加载dll文件:
使用System.loadLibrary加载
使用此方法可加载系统目录中的dll文件。可以先把dll文件复制到system32目录下,使用文件前缀名作为参数来加载dll文件。
使用System.load加载
此方法参数为dll文件全路径名。
2.2.???? 调用函数
1、首先创建JNative对象:
JNative jnative = new JNative(dll文件名, 函数名);
2、设置返回值类型:
jnative.setRetVal(Type.INT);
3、设置参数
jnative.setParameter(0, Type.STRING,?…);?//设置第一个参数为字符串
jnative.setParameter(1, Type.INT,?String.valueof(…));?????? //设置第二个参数为整数
4、执行
n.invoke();
5、获取返回值
Integer.parseInt(jnative.getRetVal());
2.3.???? 一个实例
来自国外网上的一个实例,用于摸索struct处理方法:
import?org.xvolks.jnative.JNative;import?org.xvolks.jnative.exceptions.NativeException;import?org.xvolks.jnative.misc.basicStructures.AbstractBasicData;import?org.xvolks.jnative.pointers.Pointer;import?org.xvolks.jnative.pointers.memory.MemoryBlockFactory;/**?*//**?*?SystemTime?*??*?typedef?struct?_SYSTEMTIME?{?*?????WORD?wYear;?*?????WORD?wMonth;?*?????WORD?wDayOfWeek;?*?????WORD?wDay;?*?????WORD?wHour;?*?????WORD?wMinute;?*?????WORD?wSecond;?*?????WORD?wMilliseconds;?*?}?SYSTEMTIME,??*/public?class?SystemTime?extends?AbstractBasicDataSystemTime?...{????public?short?wYear;????public?short?wMonth;????public?short?wDayOfWeek;????public?short?wDay;????public?short?wHour;????public?short?wMinute;????public?short?wSecond;????public?short?wMilliseconds;????/**?*//**?????*?分配内存,并返回指针?????*/????public?Pointer?createPointer()?throws?NativeException?...{????????pointer?=?new?Pointer(MemoryBlockFactory.createMemoryBlock(getSizeOf()));????????return?pointer;????}????/**?*//**?????*?内存大小?????*/????public?int?getSizeOf()?...{????????return?8?*?2;????}????/**?*//**?????*?获取通过内存指针解析出结果?????*/????public?SystemTime?getValueFromPointer()?throws?Na
文档评论(0)