java调用dll的几种方法(JNI,Jawin,Jacob)

易语言之ocr自动识别验证码dll文件 OCR的dll文件可以在易语言中用于自动识别验证码图片里的数字 达到减少人工输入验证码的过程 首先需要下载 ocr.dll文件 下载完成后,放到你软件运行目录中 接下来新建一个dll命令 ,然后复制以下内容 到dll命令中 .版本 2 .DLL命令 验证码初始化, , "ocr.dll", "init", 公开, 名字随便写,如果要编译成为模块,需要选中 公开 本地调用无所谓 .DLL命令 验证码识别, 文本型, "ocr.dll", "ocr", 公开, 调用的时候用 库文... 阅读详情

java调用dll的几种方法(JNI,Jawin,Jacob)

       前些天做单点登录,需要java调用dll,现在把成功经验与大家分享。
   使用Java调用DLL动态链接库的方案通常有三种:JNI, Jawin, Jacob. 其中JNI(Java Native

Interface)是Java语言本身提供的调用本地已编译的函数库的方法,本身具有跨平台性,可以在不同的

机器上调用不同的本地库。Jawin和Jacob都是sourceforge.net的开源项目,都是基于JNI技术的依赖Wi

ndows的实现,使得在Windows平台下使用COM和DLL的更加方便。

一、JNI(Java本地方法调用)
    JNI的应用方案是基于Java类和本地函数相映射的。其使用DLL的步骤还是相对比较麻烦,不但涉及

到Java编程,还涉及到C/C++编程。

    JNI的使用步骤是:

1. 编写Java类,用该类将DLL对外提供的函数服务进行声明,其中的Java方法均声明为native,其方法

签名可以自定义,不用实现函数体。

2. 用Javah工具将该Java类生成对应的.h头文件。

3.   

最重要的比较麻烦的一步:编写C/C++代码实现.h头文件中声明的函数,该C/C++代码中包含jni.h头文

件,并且编写代码时使用其中定义好的数据类型作为函数的输入和返回数据类型进行编程。用这种方法

实现数据类型转换。在该步骤中,可以在C/C++代码中调用已经存在的DLL库(当别人给我们提供一个现

成的dll控件时,我们只知道接口,不能改变它的实现,就需要“自定义的dll”调用“现成dll”)

4. 另外编写的Java代码时就可以使用该Java类了。

在第3步中,编写C/C++函数时,可以使用一个叫interface pointer的env指针来调用JNI提供的一系列(

很多)函数,用这些函数来访问JVM的对象和数据。

使用JNI的缺点:使用比较麻烦,需要对已有的DLL进行封装,需要对C/C++比较了解。

使用JNI的优点:可以跨平台调用本地库。

二、Jawin

官方网站:http://jawinproject.sourceforge.net/


Jawin的应用方案是基于函数调用时采用原始字节流传递数据的。就是在Java中指明一个DLL中的某个函

数后,通过原始字节流(需要考虑参数数据类型所占的存储字节数及系统使用的字节序列)传递给该DLL

函数需要的参数,其返回值也是通过原始字节流解析的方式获得正确的值。

Jawin有一个Jawin.dll和Jawin.jar,根据开发环境不同,需要不同的配置.


使用Jawin的缺点:不方便调试,几乎所有的错误都抛出同样的异常COMException;需要对数据类型的

转换比较了解;不能跨平台,对Windows的依赖性比较强。

使用Jawin的优点:方便使用,不用进行C/C++开发,不用对原始DLL进行封装就可以方便使用。

本人体会:我在用 Jawin 调用单点的dll时,多次出现错误,最终调试失败,后来查看它的官方文档,

发现它对某些com调用不支持。

三、Jacob

官方文档:http://danadler.com/jacob/

Jacob是Java-Com Bridge的缩写,也可以用来调用DLL。其底层也是使用JNI实现,也具有Windows 的平

台依赖性。

该控件调用相当方便,可以调用com和active, 几分钟就可以搞定,它下载后有一个dll和一个jar包,

把dll放到WIN_HOME/system32/下既可,把jar包放到工程的classpath下。

下面是我调用单点dll的事例:

import com.jacob.com.*;


public class CallSSO {
    private static Dispatch dif;
    //加载单点控件SSOCrypto.SSOCrypt.1
    static {
         dif = new Dispatch("SSOCrypto.SSOCrypt.1");
    }
    //产生随机码,调用单点的接口SSORadomGen,传递参数是strPlainString
    public static int SSORadomGen(String strPlainString)
    {
          Variant radom = Dispatch.call(dif, "SSORadomGen", new Variant(strPlainString));
          return radom.getInt();
    }
//取的加密串,调用单点的接口SSOEncrypt,传递参数是strPlainString,lngRandomnum,strSvrCert
    public static String SSOEncrypt(String strPlainString,
                                           int lngRandomnum)
    {
        String strSvrCert ="1BQYR-YLGXV-QM439-CJSCS-TCN6V";
        Variant encrypt = Dispatch.call(dif, "SSOEncrypt", new

Variant(strPlainString),new Variant(lngRandomnum),new Variant(strSvrCert));
        return encrypt.getString();
    }
}
缺点:不能跨平台,对Windows的依赖性比较强。

优点:调用相当方便,不用进行C/C++开发,不用对原始DLL进行封装就可以方便使用。

总结:以上三种方法是现在常用的java调用dll方法,本人感觉第三种比较好用,当然,每种都有优缺点,还有性能问题,我没有测试比较,请大家自己试一下吧。

java开发调用C语言的DLL 通过Java调用OCX控件或者DLL有以下几种方法,使用JNI、JACOB、Jawin等技术完成接口调用; 1.JNI 最直接的方式,也是最麻烦的方式,需要自己完成所有的工作,不推荐。 2.Jawin 尝试了一下,效果不错,但相对来说,其编程风格更贴近Windows,离Java有点远 3.Jacob 使用Jacob非常方便,Java编程风格,需要了解的知识比较少。官方的解释是Ja... 阅读详情

相关推荐

如何在Java中调用DLL:详细图解

首先,我们准备了DLL文件,并创建了一个Java项目。然后,我们导入了JNI库,并编写了Java代码来调用DLL方法。最后,我们编译并运行了Java程序,成功实现了Java与DLL的交互。在开始之前,确保已经设置好Java开发环境,并创建一个Java项目。在Java开发中,有时候需要与动态链接库(DLL)进行交互,以实现更高级的功能。在本例中,我们将使用Java来调用已经编写好的DLL。通过本文的指导,你可以在Java中轻松地调用DLL,并利用DLL的功能扩展你的Java应用程序。第一步:准备DLL文件。

CyberXZ的博客 5131

java-调用dll方法

由于需求需要添加一个USB狗,作为服务的license验证。则Java程序需要和dll进行整合。该USB狗已经提供了Java版本的dll,需要自己编写class,载入dll,并声明方法才能够使用。

weixin_43846708的博客 7750

Java语言调用dll文件的几种常见方式

java调用动态库需要关注的问题: 1. 如何装载DLL文件,以及如何定位所要使用的方法; 2. 数据类型如何对应; 3. 如何给使用的方法传递参数; 4. 如何获取返回的值。 一. 数据类型对应关系 Java Type C Type boolean int byte char char wchar_t sho...

专注基础架构领域 6231

Java 调用 DLL 文件入门

本文将介绍如何在 Java 中调用 DLL 文件,包括基本概念、环境搭建、JNI 技术、DLL 文件编写和 Java 调用过程。通过本文,读者可以了解 Java 调用 DLL 文件的基本方法,为在实际项目中应用该技术打下基础。

oandy0的博客 4050

java调用dll最简单的方式

文档内有详细的代码注释,配置也很简单,具体步骤如下。 1、需要将JNativeCpp.dll和需要调用的dll放到C:\WINDOWS\system32目录下。 2、将JNative.jar放到项目下。 3、如果运行时还是提示找不到你调用的dll,那么将mscoree.dll也放到C:\WINDOWS\system32目录下并注册此dll。 4、如果mscoree.dll一直注册不成功,则查看是否是电脑没有安装netFramework。

Windows环境下pcl点云库 安装配置全流程(精简、有效)

本文为Windows配置点云库pcl步骤,具体是win10、visual studio 2017、pcl1.11.1。

zaibeijixing的专栏 1万+

java jacob 调用dll_JAVA笔记:调用dll的几种方法(JNI,Jawin,Jacob)

JAVA以其跨平台的特性深受人们喜爱,而又正由于它的跨平台的目的,使得它和本地机器的各种内部联系变得很少,约束了它的功能。解决JAVA对本地操作的一种方法就是JNI。JAVA通过JNI调用本地方法,而本地方法是以库文件的形式存放的(在WINDOWS平台上是DLL文件形式,在UNIX机器上是SO文件形式)。通过调用本地的库文件的内部方法,使JAVA可以实现和本地机器的紧密联系,调用系统级的各接口方法...

weixin_30015509的博客 2761

巨量千川M-API实战:异步报表与批量操作自动化指南

API(应用程序编程接口)是现代软件系统间通信和数据交换的核心技术,它定义了服务间交互的协议和规范。在数字营销领域,营销API(Marketing API)通过程序化接口实现了广告账户管理、数据获取和操作自动化的能力,其技术价值在于将重复性人工操作转化为高效、准确的自动化流程,显著提升运营效率并降低人为错误。在广告投放精细化运营场景中,面对海量数据报表的获取与批量广告状态管理的需求,异步任务处理和批量操作接口成为关键技术解决方案。本文聚焦巨量千川M-API,深入解析其异步报表获取机制与批量操作实现,涵盖从任

weixin_32932149的博客 429

[转]Java调用DLL动态链接库的方案:JNI, Jawin, Jacob.

<br />Java调用DLL动态链接库的方案通常有三种:JNI, Jawin, Jacob.<br />其中JNI(Java Native Interface)是Java语言本身提供的调用本地已编译的函数库的方法,本身具有跨平台性,可以在不同的机器上调用不同的本地库。Jawin和 Jacob都是sourceforge.net的开源项目,都是基于JNI技术的依赖Windows的实现,使得在Windows平台下使用COM和 DLL的更加方便。<br />一、JNI:<br />sun相关文档:http://j

chjshan55的专栏 2973

智能车竞赛疯狂电路组:Altium Designer赛道设计与计分策略全解析

本文全面解析智能车竞赛疯狂电路组中,如何利用Altium Designer进行专业赛道设计。从软件基础操作、图层管理与封装库调用,到赛道拓扑绘制、核心尺寸规范,详细拆解设计全流程。文章深入结合计分策略,指导如何在设计阶段植入策略点,优化路径与元器件布局,以在比赛中获得时间优势,并提供了从图纸输出到实地测试的完整避坑指南。

beta5的博客 585

【低空经济】多源异构数据融合的低空智能感知系统设计与实现

本文探讨了低空智能感知系统在多源异构数据融合中的设计与实现,重点解决无人机等低空飞行器的安全监测问题。通过雷达、光学和红外传感器的数据融合,系统识别准确率提升至92%,并实现120ms的低延迟处理。文章详细介绍了时空对齐、特征级融合和动态权重自适应等关键技术,为低空经济发展提供可靠技术支持。

weixin_29065659的博客 342

Java调用本地库,如调用DLL或者SO,如:JNI, Jawin, Jacob,JNative,JNA

Java语言本身具有跨平台性,如果通过Java调用DLL的技术方便易用,使用Java开发前台界面可以更快速,也能带来跨平台性。 Java调用C/C++写好的DLL库时,由于基本数据类型不同、使用字节序列可能有差异,所以在参数传递过程中容易出现问题。 使用Java调用DLL动态链接库的方案通常有四种:JNI, Jawin, Jacob,JNative. 其中JNI(Java Native Int

u010015633的专栏 3039

【科研绘图】【数据拟合曲线】:附Origin详细画图流程

拟合曲线图

weixin_50236590的博客 4万+

java学习 JAVA调用DLL

java调用dll的几种方法(JNI,Jawin,Jacob)        前些天做单点登录,需要java调用dll,现在把成功经验与大家分享。   使用Java调用DLL动态链接库的方案通常有三种:JNI, Jawin, Jacob. 其中JNI(Java Native

enshiwzw的专栏 4693

LangChain入门(二)-通过 Google 搜索并返回答案

并复制他给我们生成 api key。(博主使用了GitHub账号登录)-邮箱验证-手机号验证-订阅-api-key。Serpapi 提供了 google 搜索的 api 接口。首先需要我们到 Serpapi 官网上注册一个用户,

Good Luck 1万+

FPGA图像处理之直方图均衡实现

直方图均衡的基本原理,就是对在图像中像素个数多的灰度值(即对画面起主要作用的灰度值)进行拉伸,而对像素个数较少的灰度值(即对画面不起主要作用的灰度值)进行合并,从而提高对比度,使图像清晰,达到增强的目的。综合以上两个条件,累积分布函数是个好的选择,因为累积分布函数是单调增函数(控制大小关系),并且值域是0到1(控制越界问题),所以直方图均衡化中使用的是累积分布函数。

FZWzsl的博客 1428

关于Java调用dll的方法

 Java语言本身具有跨平台性,如果通过Java调用DLL的技术方便易用,使用Java开发前台界面可以更快速,也能带来跨平台性。    Java调用C/C++写好的DLL库时,由于基本数据类型不同、使用字节序列可能有差异,所以在参数传递过程中容易出现问题。    使用Java调用DLL动态链接库的方案通常有三种:JNI, Jawin, Jacob. 其中JNI(Java Nat

我是传奇 1267

红绿灯背后的数学:如何用Java算出“黄金绿灯时间“?

本文探讨了城市交通信号灯配时优化的数学原理与Java实现方法。文章首先分析了信号灯配时不合理导致的交通问题,指出精确计算绿灯时长的重要性。核心内容包括:1)基于M/M/1排队模型建立车流量数学模型,通过优化算法最小化总等待时间;2)使用Java实现信号灯优化控制器,采用梯度下降法动态调整绿灯时长。文中提供了完整的Java代码实现,包括信号灯控制器基类和优化控制器类,采用原子类保证线程安全,并详细解释了关键算法原理和实现细节。该方案可为城市智能交通系统提供理论支持和技术实现参考。

墨夶的博客 1345

Java调用DLL技术调研

Java调用DLL技术总结:JNI, Jawin, Jacob

MulinB的技术博客 2072

汉书HE8,好用的汇编代码编写工具

汉书HE8,好用的汇编代码编写工具早期编写汇编代码所用功能强大

efm32 入门.pdf

本PDF共计22页,介绍的是操作驱动API,下载与否自己斟酌。

java调用本地方法(调用Dll或ocx)

去年因项目需要调用第三方接口处理数据,第三方接口使用C++写的。记录下我的使用过程。            Java如果调用Dll或OCX那么他就失去了跨平台!            一般来说java调用dll和ocx有三种方法:            1.jni                jni对C++要求较高,本人C++比较菜,所以这种方法我就不说了            2.

程军高的专栏 7035

大中型超市收银系统(可直接运行)

光步前台收银系统系统功能:商品销售、商品退货、挂单、收银员权限、会员销售、单品取消、整单取消、商品查询、脱机销售、脱机数据上传,基本资料下载,开钱箱、小票打印、收款结算,支持多币种付款方式(现金、储值卡、礼券、微信等),支持多种促销。运行环境:.net 4.0登陆信息用户名:1001 密码:123456内置商品信息,商品编码可输入00001000 - 00010000,测试效果相关功能键F5 结算 F9挂单 F11商品查询 F8退货 Insert单品取消 Del整单取消 F12开钱箱F2 会员 Ctrl+Z退出系统 Home 锁屏 相关源码待公开

java jni ocx_Java调用ocx控件以及dll

[ 通过Java调用OCX控件有几种方法,JNI、JACOB、Jawin等 1.JNI 最直接的方式,也是最麻烦的方式,需要自己完成所有的工作,不推荐。 2.Jawin 尝试了一下,效果不错,但相通过Java调用OCX控件有几种方法,JNI、JACOB、Jawin等1.JNI 最直接的方式,也是最麻烦的方式,需要自己完成所有的工作,不推荐。2.Jawin 尝试了一下,效果不错,但相对来说,其编...

weixin_33467546的博客 448

LinePhone3.2.7(android端最新版本) sip客户端

SIP客户端For android:LinePhone3.2.7(最新版本),官网地址:http://www.linphone.org/

java 调用.net类库_java调用.Net的类库dll文件

最近项目开发中,需要用java去调用.net开发团队提供的service。一开始以为是以url形式提供的webservice去调用。后来才知道.net项目组提供给我们一个dll文件说里面有有两个方法供调用,一个是发送邮件的,一个是发送短信的。那么如何在通过java去调用这个用C#实现的类库中的方法呢。通过搜索一些资料最后终于实现了,下面说说是如何实现的,挺有意思的一、实现方法的选择1、基本概念的介...

weixin_33585822的博客 1495

java dll 调用方法_关于Java调用dll的方法 | 学步园

Java语言本身具有跨平台性,如果通过Java调用DLL的技术方便易用,使用Java开发前台界面可以更快速,也能带来跨平台性。Java调用C/C 写好的DLL库时,由于基本数据类型不同、使用字节序列可能有差异,所以在参数传递过程中容易出现问题。使用Java调用DLL动态链接库的方案通常有三种:JNI, Jawin,Jacob. 其中JNI(Java NativeInterface)是Java语...

weixin_36178216的博客 505
上一篇: Android 开 发 教 程 汇 总
下一篇: android中关于手机屏幕的相关操作(获取屏幕的宽高等操作)
King·Forward
博客等级 码龄14年 117粉丝 218原创
评论 1
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值