易截截图软件、单文件、免安装、纯绿色、仅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 sort 源码解析 Object part

  上次分析了Java对primitive的排序,使用的是优化的快速排序算法。这次介绍Java对Object对象(Comparable)的排序。
Java使用了归并对Object排序,关于归并排序的细节,请查看http://zh.wikipedia.org/zh/%E5%BD%92%E5%B9%B6%E6%8E%92%E5%BA%8F
归并排序也有一个运行状态图,不过看着确实挺费解的 =。=!
在了解了归 ......

java计算两个数是否误差在百分之几

以下是计算两个数误差是否在10% ,如果在10%以内是正常,其他是不正常,用较小的数*10%+用较小的数=用较小的数*1.1%
double costNum =2;//电费平均日电量
double amountNum =3; //电量平均日电量

if(amountNum ......

Java的正则表达式

最近做spider,java的正则表达式解析出每个网页的超链接,感觉正则真的神通广大!
大概说一下,我的通常用法。
这一不只是解析出 <a href=""> 这部分
String regex = "(<a href=\")([\\S]+)(\")";
Pattern pattern = Pattern.compile(regex);
Matcher matcher = pattern.matcher(sb); //sb是一个html 代 ......

java二进制,字节数组,字符,十六进制,BCD编码转换

// 整数到字节数组转换
public static byte[] int2bytes(int n) {
byte[] ab = new byte[4];
ab[0] = (byte) (0xff & n);
ab[1] = (byte) ((0xff00 & n) >> 8);
ab[2] = (byte) ((0xff0000 & n) >> 16);
ab[3] = (byte) ((0xff000000 & n) >> 24);
return ab ......
© 2009 ej38.com All Rights Reserved. 关于E健网联系我们 | 站点地图 | 赣ICP备09004571号