`
jxdiamond
  • 浏览: 99709 次
  • 性别: Icon_minigender_1
  • 来自: 南京
社区版块
存档分类
最新评论

Java中调用dll动态库的简洁方法

    博客分类:
  • java
 
阅读更多
解压JNative-1.3.2.zip 获得三个文件,分别是:JNativeCpp.dll,libJNativeCpp.so,JNative.jar 。JNativeCpp.dll Windows下用的,拷到windows / system32目录下;

  libJNativeCpp.so Linux下使用的;

  JNative.jar 这是一个扩展包,加载到你的程序中就可以。

  一个简单例子

  
import org.xvolks.jnative.JNative;
import org.xvolks.jnative.Type;
import org.xvolks.jnative.exceptions.NativeException;
 
public class JNativeTest {
 
  public static final int messageBox(int parentHandle, String  message,String caption, int buttons){// throws NativeException, IllegalAccessException {
   JNative n = null;
   try {
      n = new JNative(“User32.dll”, “MessageBoxA”); //“.dll”不用也 可以, 常量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(); // 调用方法
      return Integer.parseInt(n.getRetVal());
   }catch(Exception ex){
     ex.printStackTrace();
   }finally {
     if (n != null)
     try {
        n.dispose();
     }catch (NativeException e) {
        // TODO Auto-generated catch block
        e.printStackTrace();
     }catch (IllegalAccessException e) {
        // TODO Auto-generated catch block
        e.printStackTrace();
     } // 记得释放
   }
   return 0;
}
 
  public static void main(String[] args) throws NativeException, IllegalAccessException{
   JNativeTest.messageBox(100,“这是使用jnative练习”, “jnativetest”, 1);
   }
}


  关于linux下编译 C代码部分说明:

  对于linux不同版本,可能会导致libJNativeCpp.so不同

  原带的libJNativeCpp.so 是在glic2.4下编译的

  为了适应glic2.3的情况,重新编译了libJNativeCpp.so,在for gcc3.4.6 glibc 2.3下。

  编译办法:

  在JNative-1.3.2-src\JNativeCpp\Release目录下

  1、备份calls.o和 asm_io.o这两个Object文件

  2、make clean

  3、恢复到当前目录calls.o和 asm_io.o这两个Object文件

  4、make

  目前已经修改了Release目录下的makefile和subdir.mk文件,使得在make clean的时候不删除calls.o和 asm_io.o两个文件

  附:linux 动态库搜索路径:

  export LD_LIBRARY_PATH=`pwd`:$LD_LIBRARY_PATH

  makefile 文件

  ################################################################################

  # Automatically-generated file. Do not edit!

  ################################################################################

  -include 。./makefile.init

  RM := rm -rf

  # All of the sources participating in the build are defined here

  -include sources.mk

  -include subdir.mk

  -include objects.mk

  ifneq ($(MAKECMDGOALS),clean)

  ifneq ($(strip $(C++_DEPS)),)

  -include $(C++_DEPS)

  endif

  ifneq ($(strip $(CC_DEPS)),)

  -include $(CC_DEPS)

  endif

  ifneq ($(strip $(C_DEPS)),)

  -include $(C_DEPS)

  endif

  ifneq ($(strip $(CPP_DEPS)),)

  -include $(CPP_DEPS)

  endif
分享到:
评论

相关推荐

    java源码包---java 源码 大量 实例

    在有状态SessionBean中,用累加器,以对话状态存储起来,创建EJB对象,并将当前的计数器初始化,调用每一个EJB对象的count()方法,保证Bean正常被激活和钝化,EJB对象是用完毕,从内存中清除…… Java Socket 聊天...

    JAVA上百实例源码以及开源项目源代码

    在有状态SessionBean中,用累加器,以对话状态存储起来,创建EJB对象,并将当前的计数器初始化,调用每一个EJB对象的count()方法,保证Bean正常被激活和钝化,EJB对象是用完毕,从内存中清除…… Java Socket 聊天...

    JAVA上百实例源码以及开源项目

    在有状态SessionBean中,用累加器,以对话状态存储起来,创建EJB对象,并将当前的计数器初始化,调用每一个EJB对象的count()方法,保证Bean正常被激活和钝化,EJB对象是用完毕,从内存中清除…… Java Socket 聊天...

    java源码包4

    在有状态SessionBean中,用累加器,以对话状态存储起来,创建EJB对象,并将当前的计数器初始化,调用每一个EJB对象的count()方法,保证Bean正常被激活和钝化,EJB对象是用完毕,从内存中清除…… Java Socket 聊天...

    java源码包2

    在有状态SessionBean中,用累加器,以对话状态存储起来,创建EJB对象,并将当前的计数器初始化,调用每一个EJB对象的count()方法,保证Bean正常被激活和钝化,EJB对象是用完毕,从内存中清除…… Java Socket 聊天...

    java源码包3

    在有状态SessionBean中,用累加器,以对话状态存储起来,创建EJB对象,并将当前的计数器初始化,调用每一个EJB对象的count()方法,保证Bean正常被激活和钝化,EJB对象是用完毕,从内存中清除…… Java Socket 聊天...

    全新VC版fiddler开发的DLL插件全源码,支持各种开发语言调用-易语言

    模块使用,名字为奇易模块, 项目由2017年开始进行第一次封装,由于C#开发DLL调用比较麻烦,特意再次封装为C++动态库进行调用。由于之前是专门为易语言而开发的dll,大部分的功能传递都是通过指针进行完成,对于其它...

    成百上千个Java 源码DEMO 4(1-4是独立压缩包)

    在有状态SessionBean中,用累加器,以对话状态存储起来,创建EJB对象,并将当前的计数器初始化,调用每一个EJB对象的count()方法,保证Bean正常被激活和钝化,EJB对象是用完毕,从内存中清除…… Java Socket 聊天...

    成百上千个Java 源码DEMO 3(1-4是独立压缩包)

    在有状态SessionBean中,用累加器,以对话状态存储起来,创建EJB对象,并将当前的计数器初始化,调用每一个EJB对象的count()方法,保证Bean正常被激活和钝化,EJB对象是用完毕,从内存中清除…… Java Socket 聊天...

    log4cplus 源码(C++编写的开源的日志系统)

    确保你的Makefile中包含 /usr/local/lib/liblog4cplus.a(静态库)或 -llog4cplus(动态库)即可, 头文件在/usr/local/include/log4cplus目录下。对于动态库,要想正常使用,还得将库安装路径加入到 LD_LIBRARY_...

    C#微软培训资料

    18.2 在 C #代码中调用 C++和 VB 编写的组件 .240 18.3 版 本 控 制 .249 18.4 代 码 优 化 .252 18.5 小 结 .254 第五部分 附 录 .255 附录 A 关 键 字.255 附录 B 错 误 码.256 附录 C .Net 名字空间...

Global site tag (gtag.js) - Google Analytics