- 1、有哪些信誉好的足球投注网站(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
Java 调用动态库最简便方法和最好用的组件 记得以前 Java 要调用 C/C++写得动态库都是用的 JNI 方式,还需要自己写不少 C/C++ 代码。比如说要在Java 中调用已有的动态库,如 Windows 的 user32.dll 的方法 MessageBoxA,具体步骤是 Java 中声明一个native 方法,然后用 javah 命令生成 JNI 样式的头文件,再自己实现头文件中声明的方法,在实现方法中装 载动态库 user32.dll,调用 MessageBoxA 方法,需要把自己写的这部分 C/C++代码封装成一个动态库,如Sample.dll,最后在 java 中装载 Sample.dll,然后执行其中所声明的本地方法。 可见,用老实的 JNI 方式,我们在调用一个已知动态库的时候还需要额外生成一个符合 JNI 规则的动态库作为桥梁,显得有点多余了。 下面我将引入一个开源的组件 JNative,在 /projects/jnative 下载(我是通过在sourceforge 中输入 java dll 有哪些信誉好的足球投注网站到的),通过它调用已有动态库中的方法就非常的方便,因为中间的 JNI 处 理过程它都为我们做好了。JNative 现在还是 Beta1 版,期待正式版的出炉,还不知道这个版本将会有什么 Bug 出现。 我们下载到的 jnative 的目录中可以看到三个文件,分别是 JNative.dll,libjnative.so,JNative.jar JNative.dll 为Windows 平台下用的,可以拷到相应的lib 加载路径,如user.dir、path、system32 或windows 目录下 libnative.so 为 Linux 平台下用的,可以拷到相应的 lib 加载路径,如 user.dir、path 目录下 JNative.jar 这个就是我们编程时候要用的 在下载的 jnative 的源代码中有示例代码,观看代码 org\xvolks\test\JNativeTester.java 就知道 jnative 是如何调用动态库方法的 如代码行 User32.messageBox(0, Demonstrates JNative in action with many Win32 calls, Welcome to JNative, 0); 是调用的关 User32 的 messageBox 方法,而 messageBox 的代码是 Public static finalint messageBox(int parentHandle, String message, String caption, int buttons) throwsNativeException, IllegalAccessException { JNative n = null; try{ n = newJNative(DLL_NAME, MessageBoxA); // 常量DLL_NAME的值为User32.dll// 构造JNative时完成装载User32.dll,并且定位MessageBoxA方法n.setRetVal(Type.INT); // 指定返回参数的类型 int i = 0; n.setParameter(i++, Type.INT, + parentHandle); n.setParameter(i++, Type.STRING, message); n.setParameter(i++, Type.STRING, caption); n.setParameter(i++, Type.INT, + buttons); // 指定位置上的参数类 型和值n.invoke(); // 调用方法returnInteger.parseInt(n.getRetVal()); } finally{ if(n != null) n.dispose(); // 记得释放} } 上面的注释是我加上去的。 Type 有一种叫做 Type.PSTRUCT 枚举值,对 C/C++中结构的处理都考虑到了,只要用 JNative 的 Pointer 类的实例来与结构对应就行了。org\xvolks\test\SNDPTester.java 中演示了如何传递 C/C++中的结构相对应的 Java 数据类型,也就是怎么封装成一个 JNative 的 Pointer 类型。 还有在 JNative 中用了 JDK1.5 的一些特性,如枚举、静态引入等,所以在 JDK1.4 下是不能用的。使用 JNative,在 Java 中传递一个 C/C++结构参数到动态库中 用 C++写的动态库的导出方法的代码如下: struct TestSt
您可能关注的文档
- IBMS(智能大厦管理系统).docx
- ICHGCP中英文对照分析和总结.docx
- ICU患者意识模糊评估单.docx
- icu年终工作总结.docx
- Igcse数学历年真题.docx
- IIC分析和总结分析和总结.docx
- Imaging was performed using highspeed 2D particle image velocimetry (PIV)分析和总结分析和总结.docx
- IMC(CIH)型不锈钢磁力泵性能参数.docx
- IMD工艺分析和总结.docx
- in,to,on和off在方位名词前的区别.docx
- Java语言的输入输出流.docx
- Java知识点分析和总结.docx
- Java中final与static关键字总结.docx
- Java中的JTable笔记分析和总结.docx
- JL04 工程预付款付款证书.docx
- joinin五年级(上册)Unit3Time单元测试卷.docx
- Journal of Cleaner Production分析和总结分析和总结.docx
- Journal of Dairy Science A survey of 38 universities that grant 4yr degrees as well as 12 instituti分析和总结分析和总结.docx
- Journal of English for Academic Purposes分析和总结分析和总结.docx
- jQuery选择题分析和总结.docx
文档评论(0)