java中如何调用DLL方法

前段时间项目需要使用调用DLL来控制POS机外设,如钱箱和小票打印机、顾客显示屏等,于是,我便开始了java调用DLL中的方法的探索,事实上,网上的例子还是很多的,一些外部包的例子也有很多,但每个人的实际情况都有所不同,尽管只是一个很简单的调用,也花了我不少时间,在这里分享一下我的经验吧。

我是通过一个外部的JAR包来间接来获得DLL文件的句柄 的,它就是jacob了,这是java com brige的简写,呵呵, 这个名称起得非常形象吧,我用的版本是jacob 1.9的,你可以到它的官方网站去下载,下载回来的压缩包中会有两个文件我们需要用到的,一个是jacob.dll,一个是jacob.jar,jacob.dll可以将它复制到系统的system32目录下,而jacob.jar文件,直接将它加入到项目的库中就可以了。这两项准备工作完成后,就可以开始尝试调用了。

新建一个类,引入jacob.jar中的两个类,

import  com.jacob.activeX.ActiveXComponent;
import  com.jacob.com.Dispatch;

然后通过dll的ControllerId来读取DLL文件

public class Print {
    private ActiveXComponent printController = null;
    private Dispatch printObj = null;
    /**
     * 默认controllerId的方法
     */
    public Print(){
        try{
            printController = new ActiveXComponent("POSControler.Controler");
            printObj = (Dispatch)printController.getObject();
        }catch(Exception e){
            printObj = new Dispatch();
            //Common.alert(e.getMessage(),"读取终端控制DLL失败");
        }
    }
}

这样就可以获得DLL文件的句柄了,那怎样调用里面的方法呢?

如果方法dll中的方法是空参数时,直接call一下就可以了,如

Dispatch.call(printObj,"setDefaultFont");

而调用有参数的方法时,则需要将参数在后面依次传入,注意按顺序噢:

Dispatch.call(printObj,"show",value,type);

查看本栏目更多精彩内容:http://www.bianceng.cnhttp://www.bianceng.cn/Programming/Java/

以上是小编为您精心准备的的内容,在的博客、问答、公众号、人物、课程等栏目也有的相关内容,欢迎继续使用右上角搜索按钮进行搜索文件
, dll
, 方法
, java调dll
, dll调用
, jacob
, 小票
, dispatch
, jacob打印excel
, ava jacob
, 一个
java调用dll方法
java调用dll方法、java调用dll类库方法、java如何调用dll文件、java 如何调用dll、java 调用dll,以便于您获取更多的相关知识。

时间: 2024-10-27 20:42:09

java中如何调用DLL方法的相关文章

java中异步调用的方法需要做成同步的效果

问题描述 现在比如说我有10笔交易,我在执行第二笔交易的时候需要根据第一笔交易的结果来判断是否需要做该笔交易.注:如果是同步调用,应该很简单,但是现在因为业务需要不能改成同步调用.求大神支招. 解决方案 解决方案二:你这是JAVA的问题还是SQLServer的问题.解决方案三:没太明白楼主的意思,就把执行交易这个动作通过存储过程来实现,在存储过程中先判断一下就行了.或者用ajax来实现,ajax网上的例子很多,楼主自己百度一下会更快解决方案四:两个异步操作当作多用户看,不就是多用户下对相同资源(

java中在调用一个方法时,堆和栈是如何分配的?

问题描述 如题.java一个类中方法太多,会有什么负面影响? 解决方案 解决方案二:看<深入Java虚拟机>第二版第五章解决方案三:一个类中方法过多,会造成系统分层困难,耦合度会比较大!~解决方案四:还没有那么深入,帮顶.祝楼主好运

java中对象调用方法返回一个对象的问题

问题描述 java中对象调用方法返回一个对象的问题 例如session.createQuery(hql); 那么这条语句返回的对象属于哪个类呢,如何判断呢? 解决方案 ctrl加鼠标点击createQuery,会有返回方法,或者你在通过session点的时候也可以看到返回方法. 解决方案二: 按住ctrl点击方法,自己去看方法的返回值. 解决方案三: 在java中将一个对象的所有方法打印出来java中远程对象方法调用中的安全策略问题java中返回局部对象问题 解决方案四: 事实上他返回的还是qu

java中的类的方法的调用的问题

问题描述 java中的类的方法的调用的问题 新人初学java,有些概念不是很懂,还望各位能帮帮忙,谢谢 在java中,我知道静态方法(变量)可以直接类名.调用,而不用再创建对象, 但是我在学习枚举时遇到这样一个问题: public enum WeekDay{ MON,TUE,WEB,THU,FIR,SAT } public class TestEnum{ public void static main(String [] ,args){ WeekDay today = WeekDay.SAT;

JAVA中对存储过程的调用方法(七) 创建、并在JAVA中直接调用存储过程

七.在JAVA中创建存储过程 并且在JAVA中直接调用 import java.sql.*; public class ProcedureTest { public static void main(String args[]) throws Exception { //加载驱动 DriverManager.registerDriver(new sun.jdbc.odbc.JdbcOdbcDriver()); //获得连接 Connection conn=DriverManager.getCon

谈谈JAVA中的调用方式

很多书籍都说Java支持传引用调用的方式,类似于C++中的Person &a引用调用,而近来编程遇到一系列问题让我对此产生了怀疑,于是将这些方法一一列出,我们来一起看看JAVA中的调用方式:   看下面的程序:  class Person {      private String name;//姓名     private String sex;//性别     public Person(String x, String y) {         this.name = x;        

在Java中进行事务处理的方法

摘要 本文介绍在Java中进行事务处理的方法,通过实例分别讲述了如何采用JavaBean.Ejb组件实现J2EE应用服务器支持的JDBC事务.JTA(Java Transaction API)事务. 关键词 JavaBean,EJB, 数据库,事务处理,JTA JavaBean JavaBean是用Java语言编写的与平台无关的组件.它是描述Java的软件组件模型,有点类似于Microsoft的COM组件的概念.在Java模型中,通过JavaBean可以无限扩充Java程序的功能,通过JavaB

java中final 变量作为方法的参数?怎么理解?见下面代码

问题描述 java中final 变量作为方法的参数?怎么理解?见下面代码 class NiMingLei { public static void main(String[] args) { Outer out= new Outer(); out.function(7); out.function(8); } } class Outer { static int y=4; void function(final int a) { class Inter { void method() { Sys

java中一个类的方法与方法之间可以有联系,也可以相互孤立吗

问题描述 java中一个类的方法与方法之间可以有联系,也可以相互孤立吗 java中一个类的方法与方法之间可以有联系,也可以相互孤立吗什么情况要孤立,什么情况要有联系呢 解决方案 看需求.比如说class A{ float get长度() { ... } float get宽度() { ... } float get面积() { return get长度()*get宽度(); }}这里就需要调用另外两个方法 解决方案二: 现在还有人有这玩意嘛 解决方案三: 类的方法主要是对属性的一些操作,方法作用