精华内容
下载资源
问答
  • 一个将C++头文件转JAVA JNA接口类的工具类,方便java程序调用C++ DLL的接口
  • java 通过jna调用c++ 推理方法 用c++ 做pytorch torch script 推理
  • I want to get a window by its title and then activate ... The problem is that the FoundWindow method searches on the all title.I would like to get a window by its partial title.import com.sun.jna.plat...

    I want to get a window by its title and then activate it. The problem is that the FoundWindow method searches on the all title.

    I would like to get a window by its partial title.

    import com.sun.jna.platform.win32.User32;

    import com.sun.jna.platform.win32.WinDef.HWND;

    public class IsRunning {

    public static void main(String[] args) {

    HWND hwnd = User32.INSTANCE.FindWindow

    (null, "Untitled - Notepad"); // window title

    if (hwnd == null) {

    System.out.println("Notepad window is not running");

    }

    else{

    User32.INSTANCE.ShowWindow(hwnd, 9 ); // SW_RESTORE

    User32.INSTANCE.SetForegroundWindow(hwnd); // bring to front

    }

    }

    }

    Instead of the string "Untitled - Notepad", I would like to search by "Untitled" only.

    解决方案

    Have a look on this answer "how to get list of all window handles in java using jna". You can then filter them on your own needs.

    展开全文
  • java jna调用c++动态库

    2020-12-29 20:17:35
    1.创建java jna调用c底层类库类,注意不同系统结构体的编码对齐方式,如果结构体导致报错,可以用参数的形式修改接口 public class Jna { private static String CloudStorageCDllLinux = "/home/lib/libxxx.so";...

    1.创建java jna调用c底层类库类,注意不同系统结构体的编码对齐方式,如果结构体导致报错,可以用参数的形式修改接口

    public class Jna {

        private static String CloudStorageCDllLinux = "/home/lib/libxxx.so";

        public interface IJNA extends Library {

            ISUPCSSByJNA instance = Native.loadLibrary(CloudStorageCDllLinux, ISUPCSSByJNA.class);
            public static class SsParam extends Structure {
                public boolean enableHttps = false;     //是否启用https
                public int port;                         //端口号
                public byte[] ip = new byte[128];        // ip
                public ServerParam(){
                    super(ALIGN_GNUC);//ALIGN_DEFAULT   ALIGN_GNUC
                }
                @Override
                protected List<String> getFieldOrder(){
                    return Arrays.asList("enableHttps", "port", "ip");
                }
            }
            //bool init(int iTest, char* szTest);
            //boolean init(int iTest, byte[] szTest);
            boolean initialize(SsParam ssParam);
        }

        public boolean initialize(IJNA.SsParam ssParam){
            return IJNA.instance.initialize(ssParam);
        }
    }

    2.在config里面实例化Jna Bean

    3.后续在spring boot服务就可以注解注入使用

    展开全文
  • Java JNA 调用dll库

    2021-02-27 22:48:04
    JNAJNA(Java Native Access )提供一组Java工具类用于...开发人员只要在一个java接口中描述目标native library的函数与结构,JNA将自动实现Java接口到native function的映射。优点JNA可以让你像调用一般java方法一样...

    JNA

    JNA(Java Native Access )提供一组Java工具类用于在运行期间动态访问系统本地库(native library:如Window的dll)而不需要编写任何Native/JNI代码。开发人员只要在一个java接口中描述目标native library的函数与结构,JNA将自动实现Java接口到native function的映射。

    优点

    JNA可以让你像调用一般java方法一样直接调用本地方法。就和直接执行本地方法差不多,而且调用本地方法还不用额外的其他处理或者配置什么的,也不需要多余的引用或者编码,使用很方便。

    JNA描述

    JNA类库使用一个很小的本地类库sub 动态的调用本地代码。程序员只需要使用一个特定的java接口描述一下将要调用的本地代码的方法的结构和一些基本属性。这样就省了为了适配多个平台而大量的配置和编译代码。因为调用的都是JNA提供的公用jar 包中的接口。

    注意

    要根据dll库文件编译版本来选择jdk版本,32位编译dll文件,jdk必须是32位,64位编译dll文件,jdk必须是64位.要不然会报:Exception in thread "main" java.lang.UnsatisfiedLinkError: Unable to load library 'TEST_API1': Native library (win32-x86-64/TEST_API1.dll) not found in resource path ([file:/C:/Program%20Files/Java/jdk1.8.0_131/jre/lib/charsets.jar, file:/C:/Program%20Files/Java/jdk1.8.0_131/jre/lib/deploy.jar, .......

    JNA jar包

    jna-x.x.x.jar   jna-platform-x.x.x.jar

    JNA类型映射

    10fa0751ed882b0f73f1a24e5e9a1e50.png

    创建结构体:

    注意:结构体内参数顺序必须和dll文件中参数顺序一样,参数类型,参数取值范围必须与dll文件中参数类型,取值范围对应.

    packagecom.microsys.eastcom.pdt;importjava.util.Arrays;importjava.util.List;importcom.sun.jna.Structure;public class EdsDgnaISSIInfo_t extendsStructure{/*szName:动态重组ISSI名称

    nDgnaIssiId:动态重组ISSI标识

    nGroupId:组标识

    nMemberCount:成员数量

    nMemberId:成员标识*/

    public char[] szName=new char[17];public intnDgnaIssiId;public intnGroupId;public intnMemberCount;public int[] nMemberId=new int[32];//结构体传指针

    public static class ByReference extends EdsDgnaISSIInfo_t implementsStructure.ByReference{}//结构体传值

    public static class ByValue extends EdsDgnaISSIInfo_t implementsStructure.ByValue{}

    @OverrideprotectedList getFieldOrder() {//TODO Auto-generated method stub

    return Arrays.asList(new String[]{"szName","nDgnaIssiId","nGroupId","nMemberCount","nMemberId"});

    }

    }

    调用dll文件

    D:\\Program Files (x86)\\eastcom\\Eastcom DS 2000(Only SDK)\\sdk\\app\\api\\bin\\EdsApi   为调用dll文件的绝对路径(不用加.dll后缀)

    packagecom.microsys.eastcom.pdt;importjava.util.StringTokenizer;importcom.microsys.fax.agent.utils.AgentGlobals;importcom.microsys.fax.agent.utils.Log;importcom.microsys.fax.agent.utils.StringUtils;importcom.sun.jna.Library;importcom.sun.jna.Native;public classpdtEdsLoadDispatchDeviceInfo {private staticString agentHomeLibDir;public interface CLibbrary extendsLibrary{

    CLibbrary instance= (CLibbrary)Native.loadLibrary("D:\\Program Files (x86)\\eastcom\\Eastcom DS 2000(Only SDK)\\sdk\\app\\api\\bin\\EdsApi", CLibbrary.class);//通过动态组重组ISSI的ID添加动态重组ISSI信息

    intEdsLcAddDgnaISSIOnId(EdsDgnaISSIInfo_t.ByValue dgnaISSIInfo);

    }public static voidmain(String[] args) {

    EdsDgnaISSIInfo_t.ByValue esdinfo= newEdsDgnaISSIInfo_t.ByValue();"UDP".getChars(0, "UDP".length(), esdinfo.szName, 0);

    esdinfo.nDgnaIssiId=3;

    esdinfo.nGroupId=111;

    esdinfo.nMemberCount=2;

    esdinfo.nMemberId[0]=4737001;

    esdinfo.nMemberId[1]=4737008;int EdsLcAddDgnaISSIOnId=CLibbrary.instance.EdsLcAddDgnaISSIOnId(esdinfo);

    Log.info("EdsLcAddDgnaISSIOnId:"+EdsLcAddDgnaISSIOnId);

    Log.info("EdsLcDeleteDgnaISSIInfoById:"+EdsLcDeleteDgnaISSIById);

    }

    }

    }

    JNA 调用常出现问题:https://blog.csdn.net/m0_37725100/article/details/93998879

    展开全文
  • Java调用C++动态链接库的方式很多,有jnative,jna等。这里介绍如何通过jna的方式调用动态链接库。调用代码很简单,就是需要注意几个问题。补充:如dll内部访问配置文件,需将配置文件放置到jre路径下,在其他路径下...

    Java调用C++动态链接库的方式很多,有jnative,jna等。这里介绍如何通过jna的方式调用动态链接库。

    调用代码很简单,就是需要注意几个问题。

    补充:如dll内部访问配置文件,需将配置文件放置到jre路径下,在其他路径下访问不到

    如有更好的解决方案请在回复里及时指正,谢谢

    1、动态链接库编译时选择的平台。如果通过x86平台编译,那么只能使用32位jdk环境加载,如果要使用64位jdk,必须使用x64平台编译。

    这一点很重要,如果设置的不对,即使后面编码,动态链接库的路径均没有问题,调用的时候仍然会报错。

    java.lang.UnsatisfiedLinkError: Unable to load library 'Dll1': ÕҲ»µ½ָ¶¨

    2、动态链接库路径。一般放在项目根路径下就可以了。

    上面的两个注意事项搞清楚了,那么后面编码其实很容易。

    创建动态链接库,并采用x64位平台生成。这里使用的是visual studio 2017开发工具。

    创建动态链接库空项目

    手工新建Dll1.def模块定义文件LIBRARY Dll1

    EXPORTS

    add

    substract

    printHello

    编写源文件#include "stdafx.h"

    #include

    using namespace std;

    int add(int a, int b) {

    return a + b;

    }

    int substract(int a, int b) {

    return a - b;

    }

    void printHello() {

    cout << "Hello,JNA" << endl;

    }

    右键项目->属性->链接->输入->右侧模块定义文件->选择Dll1.def

    采用release作为活动解决方案配置,x64作为活动解决方案平台生成dll。确保后面64位jdk能够顺利加载dll。

    0a31da5c8d3ae502b0f8ec7e2a4b46b1.png

    2、下载放入到java项目类路径下。

    net.java.dev.jna

    jna

    4.1.0

    3、编码,dll文件放在项目根路径下之后,代码里面指定dll就可以不用写绝对路径,而且不用指定后缀".dll"。

    import com.sun.jna.Library;

    import com.sun.jna.Native;

    public class DllTest {

    public interface Dll extends Library{

    Dll instance = (Dll)Native.loadLibrary("src/main/resources/Dll1", Dll.class);

    public int add(int a,int b);

    public int substract(int a,int b);

    public void printHello();

    }

    public static void main(String[] args) {

    int sum = Dll.instance.add(5, 3);

    int sub = Dll.instance.substract(5, 3);

    System.out.println("add(5,3) = "+sum);

    System.out.println("substract(5,3) = "+sub);

    Dll.instance.printHello();

    }

    }

    4、运行结果截图。

    721f148af42cdb66c414bf5f33e167e4.png

    Exception in thread "main"java.lang.UnsatisfiedLinkError: Unable to load library

    首先我们要设置native的位置:

    1. 右键工程项目build path

    524615d248e67a789a93793e31f90337.png

    2.   加载的dll目录应该写完整的路劲,如我们的dll放在resources中,那我们在加载dll库时路劲应该写src/main/resources/xxx.dll

    3.   之后还有问题,那应该是编译的jdk和dll不匹配了,可以安装一个32/64的jdk,在eclipse中指定使用哪个jdk,

    使用32或64的jdk,之后便可以加载到dll文件

    f01cb5a332b94e3936ffdb4f9d64f59b.png

    展开全文
  • JNA(Java Native Access)是建立在JNI技术基础之上的一个Java类库,它使我们可以方便地使用java直接访问动态链接库中的函数。我们不需要重写我们的动态链接库文件,而是有直接调用的API,大大简化了我们的工作量。...
  • I'm hacking a game and I'm using Java JNA to write memory to the game, I can only write byte arrays but I need to write booleans as well (if that makes sense). So this is my write methodsVKernel32.jav...
  • java通过jna调用c返回结构体例子,就是解决c语言返回结构体,java用类对象接收,包含jar包,java文件,c文件,操作步骤文档,在linux下完美通过
  • java调用dll文件需要使用回调函数作为公开函数的参数时,用以下方法实现:首先,看c++中定义的dll公开函数:typedef void (*ccback)(char *name ,int length);int dllFunction(char *ip, int port, ccback cc);引用...
  • Java JNA方式调用dll/so方法Windows环境下调用dllLinux环境下调用so兼容Windows环境和Linux环境 Windows环境下调用dll 首先,将dll文件放在项目的resources目录的根目录下,以“libtest.dll”为例,拷贝至项目...
  • JNA简介JNA全称Java Native ...JNA提供一组Java工具类用于在运行期动态访问系统本地库(native library:如Window的dll)而不需要编写任何Native/JNI代码。开发人员只要在一个java接口中描述目标native library的函数...
  • java_jna

    2018-11-30 13:59:40
    java调取窗口句柄所需要的JNA包,就当回报社会了。
  • 1、监测,使用JNA: pom.xml: <...net.java.dev.jna</groupId> <artifactId>jna</artifactId> <version>4.0.0</version> </dependency> <!-- https://
  • 依赖32位jdk,windows 和jna.jar---> 依赖 XLDownload.dll, zlib1.dll 放置项目跟目录。不是src下,可以为绝对路径package com.leunpha;import com.sun.jna.Native;import com.sun.jna.NativeLong;import ...
  • 问题是com.sun.jna.Native.getNativeSize(Class)不是在这种情况下使用的正确函数。 使用32位JVM时,问题是可见的(64位虚拟机不可见)。对于结构,上面提到的函数假​​定它们通过引用传递(指向结构的指针),因此函数...
  • Java JNA使用参考手册.pdf
  • JAVA调用DLL:jna-5.1.0

    2018-12-08 11:03:25
    jna是在java开发环境中调用dll等外源包的工具之一,目前的最新版本是5.1.0
  • java使用jna开启关闭第三方应用程序,附简单的例子,打开一个记事本,朋友们也可以改为自己需要打开的应用程序
  • I have this java testpackage ftct;import com.sun.jna.Library;import com.sun.jna.Native;import com.sun.jna.Platform;import com.sun.jna.win32.StdCallLibrary;import java.util.Date;public class LibFTCT {p...
  • Java JNA—— dll回调函数实现

    千次阅读 2020-01-04 16:56:16
    java调用dll文件需要使用回调函数作为公开函数的参数时,用以下方法实现: 首先,看c++中定义的dll公开函数: typedef void (*ccback)(char *name ,int length); int dllFunction(char *ip, int port, ccback cc); ...
  • I'm trying to use JNA (Overview) to send messages to an application when minimized or not on top (mouse click for example), and the I found that people are usingcom.sun.jna.platform.win32.User32.SendM...
  • Java实现获取窗口句柄并操作窗口 JNA Java实现获取窗口句柄并操作窗口 JNA
  • JAVA利用JNA调用DLL

    2018-05-30 16:13:07
    JAVA 利用JNA调用C程序32位或者64位dll 实例,直接解压运行。
  • Java通过JNA方式调用DLL(动态链接库) Java调用C语言动态库(JNA方式):回调函数、结构体数组传参、结构体数组返回 一些坑: 1.传入Dll的中文字符串乱码解决,这个要看你在C++那边的汉字编码例如我的是GBK编码,在...
  • 自己写的dll文件,用以java jna调用测试用途自己写的dll文件,用以java jna调用测试用途自己写的dll文件,用以java jna调用测试用途自己写的dll文件,用以java jna调用测试用途
  • 在Linux系统下,JAVA程序通过JNA技术实现调用C语言编程输出的so库接口函数,从而实现java程序与c程序之间的交互。

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 8,078
精华内容 3,231
关键字:

javajna

java 订阅