易截截图软件、单文件、免安装、纯绿色、仅160KB

Java中如何调用VC的动态库

以前一篇的DLL为例阐述Java如何调用动态库
目前存在一个VC编译的非MFC动态库DLL(具体如何生成非MFC动态库DLL见前一篇文章),名称为mydll.dll,其中有导出函数myadd:形如:int myadd(int,int),现java应用程序需要调用该动态库的myadd函数。具体实现步骤如下:
1、编写调用mydll.dll的java程序
(1)程序testMyDll .java如下:
public class testMyDll {
 private native static int myadd(int a,int b);
 static {
  System.loadLibrary("javamydll");  //该动态库名称为中间动态库,由java程序使用,负责调用需要使用的动态库。
 }
 /**
  * @param args
  */
 public static void main(String[] args) {
  // TODO Auto-generated method stub
  System.out.println(myadd(4,5));
 }
}
(2)编译testMyDll .java程序,检查是否存在错误。
  javac testMyDll .java
2、生成头文件testMyDll.h,供生成中间动态库使用。
  javah testMyDll
3、生成中间动态库javamydll.dll
(1)使用vc工具先生成win32 Dynamic-Link Library空工程
(2)将上面生成的头文件testMyDll.h添加进去,同时还需要添加jdk下include目录中 的jni.h、jni_md.h这两个头文件,最好将jni.h文件放入安装目录下include的目录下
(3)添加调用需要使用的动态库的实现文件testMyDll.cpp
程序如下:
//testMyDll.cpp
#include <windows.h>
#include "testMyDll.h"
typedef int (*padd)(int,int);
JNIEXPORT jint JNICALL Java_testMyDll_myadd
  (JNIEnv * a, jclass b, jint x, jint y)
{
 HINSTANCE hins = ::LoadLibrary("mydll.dll");
 if(hins == NULL)
 {
  return 0;
 }
 int res;
 padd pa = (padd)GetProcAddress(hins,"myadd");
 if(pa != NULL)
 {
  res = x+y;
 }
 ::FreeLibrary(hins);
 return res;
}
(4)编译生成中间动态库javamydll.dll
4、将中间动态库javamydll.dll和需使用的动态库mydll.dll放在testMyDll.class目录下,运行该类:  java testMyDll
程序输出结果:9
从上述实现方法中可以看到,java需要调用已有的动态库,还需要自己生成一个中间动态库,负责调用转换。所以效率就会有点低。


相关文档:

Java程序员的推荐阅读书籍

Java程序员的推荐阅读书籍》
JavaEye (http://www.javaeye.com)
作为Java程序员来说,最痛苦的事情莫过于可以选择的范围太广,可以读的书太多,往往容易无所适从。我想就我自己读过的技术书籍中挑选出来一些,按照学习的先后顺序,推荐给大家,特别是那些想不断提高自己技术水平的Java程序员们。
一、Java编程入门类 ......

传智播客java培训 Java开发前奏

第一次写这样的博客,感觉自己做的有点像笔记,不过本来就是笔记,我做笔记一般都是把本来不知道的,感觉有用的写下来,而且我也一般用与老师接近的语句写下来,避免自己的误解导致错误。
这次我看了《传智播客_张孝祥_Java基础1_Java开发前奏》这个课程。
1.老师说JAVA的第一个特点是”一次编译,到处运行“, ......

java面试题

1  字符串比较是否相等用什么方法?
2 equals()和hashCode()的区别?
3 forward和senRedirect区别?
4 servlet生命周期?
5 过滤器的作用
6 JSP包含静态文件的语法
7 JSP注释(至少两个以上)
8 table中border,cellpadding,td中colspan,rowspan的意义
9 js三种弹出窗口 a 警告  b 确认  c 信息 ......

java 分页

    关键字: java分页代码实例
package com.hjf.web.view;
public class PageUtil ...{
    private int pageSize;//每页显示的条数
    private int recordCount;//总共的条数
    private int currentPage;//当前页面
    publi ......
© 2009 ej38.com All Rights Reserved. 关于E健网联系我们 | 站点地图 | 赣ICP备09004571号