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

通过JAVA进行DLL接口调用(JNA)

阅读更多
这两天进行开发程序,需要读取硬件厂商提供的设备数据,而对方都是以DLL接口形式提供的数据访问.一般是通过JNA或者JNATIVE去与调用DLL的,第一种是实现了DLL的接口方法,第二种则是通过设置接口方法及其参数,通过INVOKE的方式进行的数据调用,我采用的是JNA来进行程序开发.
JNA(https://jna.dev.java.net/)
例子如下:
import com.sun.jna.Library;
import com.sun.jna.Native;
import com.sun.jna.Pointer;

public class EnvironmentControl {
/** Dll of JNA interface mapping and usage. */
    public interface LanBase extends Library {
   
    LanBase INSTANCE = (LanBase) Native.loadLibrary("DsrLanProxy.dll", LanBase.class);  
    int  CreateConnect(String strConnParam);
    int DLLStartup();
    int DLLCleanup();
    int ReleaseConnection();
    int Send(String szDeviceID, String szParam);
    int TakePcCommand(int nCmdID, String szCmdParam,int nHumidityDot);
    int SetCommonParam(int nCmdID, String szDeviceID, String szValue);
    int TakeCommandExecuteState();
    Pointer TakeCommandData();
       
    }
   

    public static void main(String[] args) throws Exception {
    LanBase lanBase = LanBase.INSTANCE;
        String strConnParam = "192.168.0.241\r\n2101";
        int bConnFlag = lanBase.DLLStartup();//must run this code;
        System.out.println("init the dll is " + (bConnFlag==1?"OK":"ERROR"));
        int bRet = 0;
        if(bConnFlag==0) return ;
        bRet= lanBase.CreateConnect(strConnParam);//create the connect
        System.out.println("connect is " + (bRet==1?"OK":"ERROR"));
        /*
         * enumCmd_TakeProductInfo = 0,        // 产品信息
        enumCmd_SetTemperatureUpLimit = 18, // 设置温度上限
        enumCmd_SetTemperatureLowLimit = 19,// 设置温度下限
        enumCmd_SetHumidityUpLimit = 20,    // 设置湿度上限
        enumCmd_SetHumidityLowLimit = 21,   // 设置湿度下限
        enumCmd_BackStandby = 25,           // 开始记录
        enumCmd_StartRecord = 26,           // 停止记录
        enumCmd_cmdTakeRecordSet = 33,      // 获取记录参数设置
        enumCmd_cmdTakeRecordData = 34,     // 获取记录数据
        enumCmd_cmdTakeParamSet = 36,       // 获取普通工作参数
        enumCmd_cmdDownLoadAck = 37,        // 下载记录时的确认
        enumCmd_cmdReadSensor = 38,         // 获取实时数据
         */
        long nCommandRet = lanBase.TakePcCommand(38, "TH0807220812LA", 1);//send the command
        System.out.println("read date command is " + (nCommandRet==1?"OK":"ERROR"));
        int m_LastSendRet;//the command execute state
        m_LastSendRet = lanBase.TakeCommandExecuteState();//get the command state when return 1 is ok
        int nTimeOut=0,LanCommTimeOut = 1000;
        while ( m_LastSendRet == 4)//the command is free
        {
        m_LastSendRet = lanBase.TakeCommandExecuteState();
            if (nTimeOut++ < LanCommTimeOut)
            {
                Thread.sleep(20);
                m_LastSendRet = lanBase.TakeCommandExecuteState();
            }
            else
            {
                break;
            }
        }
        System.out.println("the command execute result is " + (m_LastSendRet==1?"OK":"ERROR"));
        Pointer pointer = lanBase.TakeCommandData();
        String strResult = pointer.getString(0);
        System.out.println(strResult);
       
       
    }
}
参考网址是:https://jna.dev.java.net/javadoc/overview-summary.html
分享到:
评论

相关推荐

    java调用C#封装的dll(jna,com)

    java调用C#封装的dll(jna,com)java调用C#封装的dll(jna,com)java调用C#封装的dll(jna,com)

    JNA调用DLL完整实例demo

    在“JNA调用DLL完整实例demo”中,我们首先需要创建一个Java接口,这个接口将代表DLL中的函数。例如,如果DLL中有一个名为`recvWork`的函数,我们的Java接口可能会这样定义: ```java public interface ...

    java用JNA调用dll实例,包含各种参数调用

    本示例项目"JNA_Demo"应该包含了一些具体的DLL调用案例,通过阅读源码,你可以更深入地了解如何在不同情况下使用JNA调用DLL函数。实践是最好的老师,建议结合示例逐步学习和理解这些概念,以便在实际项目中灵活运用...

    Jna调用dll实例

    JNA通过提供一个接口定义,让Java代码能够映射到本地函数调用。这个接口定义包含了函数名、参数类型和返回值类型。一旦接口定义完成,JNA会自动处理底层的内存管理和参数转换,使得Java可以直接调用C风格的函数,...

    亲测可用,java 成功调用dll函数。包含调用回调函数,springboot版本。最近由于公司业务需要,要调用dll文件,用JNA调用。

    在Java通过JNA调用DLL时,如果DLL函数需要一个回调函数作为参数,那么Java需要定义一个接口,该接口的方法将作为回调函数的实现,JNA会处理这个接口的调用转换。 4. **Spring Boot**:Spring Boot是基于Spring框架...

    jna jar实现java调用dll

    Java Native Access(JNA)是一种在Java中调用本地库(如DLL文件)的框架,无需编写C语言的桥接代码或使用Java的本机接口(JNI)。它提供了一种简单的方法来映射函数调用,数据类型和结构,使得Java开发者能够方便地...

    JAVA利用JNA调用DLL

    在Java编程环境中,有时我们需要与操作系统底层功能进行交互,例如调用C语言编写的动态链接库(DLL)函数。在这种情况下,Java Native Access (JNA) 提供了一个强大的解决方案。JNA 是一个Java库,允许Java代码直接...

    java调用dll需要的jna包

    在Java程序中,我们可以通过JNA来调用DLL中的函数,实现跨语言的功能集成。 标题提到的"java调用dll需要的jna包"指的是两个关键的JNA组件:`jna-4.5.2.jar`和`jna-platform-4.5.2.jar`。这两个JNA版本为4.5.2的jar...

    java调用dll接口

    Java本身并不直接支持DLL调用,但可以通过一些第三方库来实现这一目标,例如Java Native Access(JNA)。 JNA是Java平台的一个开源库,它提供了直接访问操作系统原生API的能力,无需编写C代码或使用JNI(Java ...

    java调用C++动态链接库dll接口

    本项目涉及的"java调用C++动态链接库dll接口"是解决这种跨语言交互问题的一种方法,主要利用了Java Native Interface(JNA)这一技术。 JNA是Java平台的标准库,它允许Java代码直接调用本机库(如DLL或.so文件)的...

    通过JNA让Java调用Dll方法

    研究java调用dll的时候,大部分都是通过jni,比较麻烦,我找到了通过jna方法调用dll的方法,用起来比较方便,只需要引用jna.jar包,这个jar包已经包含在程序中,还包含了我调用dll的遇到难道的解决办法。

    Java通过JNA调用系统API

    通过理解JNA的工作原理,以及如何定义接口和结构体来映射原生函数,你可以轻松地在Java中调用`Kernel32.dll`或其他系统库中的函数。记住,合理使用并注意安全性和性能优化,是成功使用JNA的关键。

    [测试通过]JAVA调用第三方DLL的简单方法:JNA及DEMO

    总结,通过JNA,我们可以方便地在Java项目中集成和调用第三方DLL,无需深入学习JNI。只需定义接口,映射DLL函数,然后加载并调用这些函数,就可以实现Java和本地代码的交互。在给定的DEMO中,我们看到了如何使用JNA...

    java jna 调用dll例子

    在本例中,“java jna 调用dll例子”指的是使用JNA在Java应用程序中调用Windows上的动态链接库(DLL)文件,这里特别提到了大华SDK的Dll,这通常用于处理视频流和视频播放功能。 大华SDK( Dahua Software ...

    java调用C#封装的dll方法

    其中一种方案是使用Java Native Access (JNA) 来调用通过C++封装的C# DLL文件。 **步骤详解:** **1. 创建C# COM组件:** - **新建项目:** 在Visual Studio中创建一个新的类库项目,并命名为`COMTest`。 - **...

    使用JNA替代JNI调用DLL,并解决内存溢出问题

    为了解决上述问题,一种常见的策略是请求C++团队编写一个DLL文件来负责解析二进制数据,然后Java应用通过调用该DLL来获取解析后的结果,通常是以JSON格式返回。这就涉及到如何在Java中调用DLL的问题。 #### 方案...

    自己写的dll文件,用以java jna调用测试用途

    自己写的dll文件,用以java jna调用测试用途自己写的dll文件,用以java jna调用测试用途自己写的dll文件,用以java jna调用测试用途自己写的dll文件,用以java jna调用测试用途

    JNA java调用dll

    在标题"JNA java调用dll"中,我们关注的核心技术就是Java通过JNA来调用动态链接库(DLL)文件,这是在Java中实现跨平台 native 功能的一种方法。 DLL是Windows操作系统中的一个重要概念,它包含了一系列可被不同...

    c++ 代码实现 dll 工程 用于java jna调用

    本教程将详述如何使用C++编写DLL动态链接库,并通过Java的Java Native Access (JNA)库进行调用,从而实现Java程序对C++功能的调用。 首先,我们需要了解DLL是什么。DLL(Dynamic Link Library)是Windows操作系统中...

    JNA方式实现Java调用dll的必用jar包

    这个"jna5.jar"文件是JNA的一个版本,其中包含了所有必要的组件,使得Java程序能够通过JNA接口与本地dll进行通信。 在Java中调用dll的步骤通常包括以下几点: 1. **添加JNA依赖**:首先,项目中需要引入JNA库,这...

Global site tag (gtag.js) - Google Analytics