首页
学习
活动
专区
圈层
工具
发布
    • 综合排序
    • 最热优先
    • 最新优先
    时间不限
  • 来自专栏10km的专栏

    android下使用JNA

    jna在windows和linux下使用都很简单只要导入jna.jar就可以,maven中如下引入就可以了 <dependency> <groupId>net.java.dev.jna</groupId > <artifactId>jna</artifactId> <version>5.5.0</version> </dependency> 但是在android下要使用jna可就没这么简单了 打开jna-5.5.0.jar,的确在jar包中找不到com/sun/jna/android-arm/这个文件夹 ? 于是我在google上找了一些关于android下使用jna的文章,找到了解决方案: jna项目的确没有把android平台的动态库libjnidispatch.so打到jna.jar包(到少到目前最新的 去jna仓库的dist文件夹(以5.5.0版本为例): https://github.com/java-native-access/jna/tree/5.5.0/dist 如果你访问github较慢,

    2.6K30发布于 2020-06-09
  • 来自专栏程序那些事

    java高级用法之:JNA中的Function

    简介 在JNA中,为了和native的function进行映射,我们可以有两种mapping方式,第一种是interface mapping,第二种是direct mapping。 而这个JAVA中的映射在JNA中就是一个function。通过或者function对象,我们可以实现一些非常强大的功能,一起看看吧。 我们知道JNA的流程是先进行Library的映射,然后再对Library中的Function进行映射。所以很自然的我们应该可以从Library中得到Function。 除了根据Library name获取Function之外,JNA还提供了根据Pointer来获取Function的方法。 本文已收录于 http://www.flydean.com/07-jna-function/

    80420编辑于 2022-05-17
  • 来自专栏程序那些事

    java高级用法之:JNA中的Structure

    简介 前面我们讲到了JNA中JAVA代码和native代码的映射,虽然可以通过TypeMapper来将JAVA中的类型和native中的类型进行映射,但是native中的数据类型都是基础类型,如果native 不用怕,JNA提供了Structure类,来帮助我们进行这些映射处理。 native中的struct 什么时候会用到struct呢? JNA会在函数调用之前将Structure的内容写入到native memory中,并且在函数调用之后,将 native memory中的内容回写到Structure中。 总结 结构体是native方法中经常会使用到的一种数据类型,JNA中对其进行映射的方法是我们要掌握的。 本文已收录于 http://www.flydean.com/08-jna-structure/ 最通俗的解读,最深刻的干货,最简洁的教程,众多你不知道的小技巧等你来发现!

    2.3K40编辑于 2022-05-09
  • 来自专栏程序那些事

    java高级用法之:JNA中的Structure

    简介 前面我们讲到了JNA中JAVA代码和native代码的映射,虽然可以通过TypeMapper来将JAVA中的类型和native中的类型进行映射,但是native中的数据类型都是基础类型,如果native 不用怕,JNA提供了Structure类,来帮助我们进行这些映射处理。 native中的struct 什么时候会用到struct呢? JNA为我们提供了Structure类。 默认情况下如果Structure是作为参数或者返回值,那么映射的是struct*,如果表示的是Structure中的一个字段,那么映射的是struct。 JNA会在函数调用之前将Structure的内容写入到native memory中,并且在函数调用之后,将 native memory中的内容回写到Structure中。 总结 结构体是native方法中经常会使用到的一种数据类型,JNA中对其进行映射的方法是我们要掌握的。 本文已收录于 http://www.flydean.com/08-jna-structure/

    90420编辑于 2022-05-17
  • 来自专栏程序那些事

    java高级用法之:JNA中的回调

    为了方便和native方法进行交互,JNA中同样提供了Callback用来进行回调。JNA中回调的本质是一个指向native函数的指针,通过这个指针可以调用native函数中的方法,一起来看看吧。 JNA中的Callback 先看下JNA中Callback的定义: public interface Callback { interface UncaughtExceptionHandler callback的应用 callback的定义 因为JNA中的callback实际上映射的是native中指向函数的指针。 实际上当前JNA的实现都是interface mapping,所以接下来的逻辑就是从pointerCallbackMap中获取函数指针对应的callback。 如果真的要想在JNA中调用在TestLibrary中创建的两个call方法:callVoidCallback和callInt8Callback,首先需要加载对应的Library: TestLibrary

    1.8K10编辑于 2022-05-10
  • 来自专栏程序那些事

    java高级用法之:JNA中的Function

    简介 在JNA中,为了和native的function进行映射,我们可以有两种mapping方式,第一种是interface mapping,第二种是direct mapping。 而这个JAVA中的映射在JNA中就是一个function。通过或者function对象,我们可以实现一些非常强大的功能,一起看看吧。 我们知道JNA的流程是先进行Library的映射,然后再对Library中的Function进行映射。所以很自然的我们应该可以从Library中得到Function。 除了根据Library name获取Function之外,JNA还提供了根据Pointer来获取Function的方法。 本文已收录于 http://www.flydean.com/07-jna-function/

    1.2K60编辑于 2022-05-06
  • 来自专栏山行AI

    Elasticsearch源码分析四之JNA与swap浅析

    前面几篇我们分析了Elasticsearch的启动过程和线程池部分的源码,这里我们来分析一下Elasticsearch中的JNA使用和swap的那些事。 ()方法,进入内部调用的是JNANatives.tryMlockall()方法,继续进入方法内部调用的是JNACLibrary中的方法 使用java调用dll和cpp文件方法很多,可以使用jni,jna 所以,采用jna比较适合。 JNA(Java Native Access)框架是一个开源的Java框架,是SUN公司主导开发的,建立在经典的JNI的基础之上的一个框架。 JNA项目地址:https://jna.dev.java.net/ JNA的安装很简单,把从官网下载的jna.jar包导入工作路径就可以了。 JNACLibray是通过JNA来调用linux和mac中的cpp库文件的,JNAKernel32Libray是通过调用windows的kernel32.dll来执行相关操作的。

    1.8K20发布于 2020-03-11
  • 来自专栏程序那些事

    java高级用法之:在JNA中使用类型映射

    简介 JNA中有很多种映射,library的映射,函数的映射还有函数参数和返回值的映射,libary和函数的映射比较简单,我们在之前的文章中已经讲解过了,对于类型映射来说,因为JAVA中的类型种类比较多 ,所以这里我们将JNA的类型映射提取出来单独讲解。 类型映射的本质 我们之前提到在JNA中有两种方法来映射JAVA中的方法和native libary中的方法,一种方法叫做interface mapping,一种方式叫做direct mapping。 注意,这里用到了testlib,这个testlib是从JNA的native模块中编译出来的,如果你是MAC环境的话可以拷贝JNA代码,运行ant native即可得到,编译完成之后,将这个libtestlib.dylib 总结 本文讲解了JNA中的类型映射规则和自定义类型映射的方法。 本文的代码:https://github.com/ddean2009/learn-java-base-9-to-20.git

    1.8K40编辑于 2022-04-01
  • 《解锁JNA与CUDA内核密码,定制专属AI算子》

    JNA是一个极为特殊的存在,它打破了Java程序与本地代码之间那道看似难以逾越的高墙 ,为Java开发者开启了一扇通往本地代码世界的大门。 而JNA的出现,彻底改变了这一局面。它通过巧妙的设计,让Java程序能够轻松访问本地共享库,就像调用普通Java方法一样自然。JNA的神奇之处在于,它不需要复杂的生成或维护额外代码的过程。 从本质上讲,JNA就像是一个智能的翻译官,在Java世界与本地代码世界之间架起了一座沟通的桥梁,让两者能够顺畅地交流与协作。 当我们将JNA与CUDA内核相结合,来实现自定义AI算子时,就像是在进行一场精彩绝伦的艺术创作。通过JNA,我们能够将Java的便捷性与CUDA的高性能完美融合,打造出独具特色的AI算子。 在利用JNA调用CUDA内核实现自定义AI算子的过程中,我们不可避免地会遇到一些技术挑战。其中,性能优化是一个关键问题。

    24110编辑于 2025-06-09
  • 来自专栏程序那些事

    java高级用法之:JNA中的Memory和Pointer

    简介 我们知道在native的代码中有很多指针,这些指针在JNA中被映射成为Pointer。 除了Pointer之外,JNA还提供了更加强大的Memory类,本文将会一起探讨JNA中的Pointer和Memory的使用。 Pointer Pointer是JNA中引入的类,用来表示native方法中的指针。大家回想一下native方法中的指针到底是什么呢? 总结 Pointer和Memory算是JNA中的高级功能,大家如果想要和native的alloc方法进行映射的话,就要考虑使用了。 本文已收录于 http://www.flydean.com/06-jna-memory/

    1.2K11编辑于 2022-05-17
  • 来自专栏朝雨忆轻尘

    Java跨语言调用,使用JNA访问Java外部接口

    JNA技术原理 JNA使用一个小型的JNI库插桩程序来动态调用本地代码。 但总体影响不大,因为JNA也避免了JNI的一些平台配置的开销。 3. JNA简单使用 JNA的项目已迁移至Github,目前最新版本是4.1.0,已有打包好的jar文件可供下载。 package com.sun.jna.examples; import com.sun.jna.Library; import com.sun.jna.Native; import com.sun.jna.Platform JNA通过这个Class类型,根据指定的.dll/.so文件,动态创建接口的实例。该实例由JNA通过反射自动生成。 JNA也不例外。

    5.5K21发布于 2019-06-18
  • 来自专栏程序那些事

    java高级用法之:JNA中的回调

    为了方便和native方法进行交互,JNA中同样提供了Callback用来进行回调。JNA中回调的本质是一个指向native函数的指针,通过这个指针可以调用native函数中的方法,一起来看看吧。 JNA中的Callback 先看下JNA中Callback的定义: public interface Callback { interface UncaughtExceptionHandler callback的应用 callback的定义 因为JNA中的callback实际上映射的是native中指向函数的指针。 实际上当前JNA的实现都是interface mapping,所以接下来的逻辑就是从pointerCallbackMap中获取函数指针对应的callback。 如果真的要想在JNA中调用在TestLibrary中创建的两个call方法:callVoidCallback和callInt8Callback,首先需要加载对应的Library: TestLibrary

    1.1K30编辑于 2022-05-17
  • 来自专栏程序那些事

    java高级用法之:JNA中的Memory和Pointer

    简介 我们知道在native的代码中有很多指针,这些指针在JNA中被映射成为Pointer。 除了Pointer之外,JNA还提供了更加强大的Memory类,本文将会一起探讨JNA中的Pointer和Memory的使用。 Pointer Pointer是JNA中引入的类,用来表示native方法中的指针。大家回想一下native方法中的指针到底是什么呢? 总结 Pointer和Memory算是JNA中的高级功能,大家如果想要和native的alloc方法进行映射的话,就要考虑使用了。 本文已收录于 http://www.flydean.com/06-jna-memory/

    3.1K20编辑于 2022-05-05
  • 来自专栏程序那些事

    java高级用法之:JNA类型映射应该注意的问题

    简介 JNA提供JAVA类型和native类型的映射关系,但是这一种映射关系只是一个大概的映射,我们在实际的应用中还有很多需要注意的事项,本文将会为大家详细讲解在使用类型映射中可能会出现的问题。 如果JAVA的unicode characters要转换成为char数组,那么需要进行一些编码操作,如果设置了jna.encoding,那么就会使用设置好的编码方式来进行编码。 Mapping A String getString(); // Mapping B WString getString(); 如果native code为String分配了内存空间,那么我们最好使用JNA added correctly", arg1 + arg2, lib.addVarArgs("dd", arg1, arg2)); 总结 本文介绍了在使用JNA 本文的代码:https://github.com/ddean2009/learn-java-base-9-to-20.git 本文已收录于 http://www.flydean.com/05-jna-type-mapping-details-md

    1.5K50编辑于 2022-04-01
  • 来自专栏oracle3技术大杂烩

    2018-12-24 JNA调试 : eclipse + Vs 联合调试

    参考文章《Jni 调试 : eclipse + Vs 联合调试》发现jna也可以按类似的方法调试,方法如下: 1、复制dll到java工程 cp d:\jna-cpp\build\Debug\demojna.dll d:\jna-java\src\main\resources\win32-x86-64\ 然后切记要在eclipse中刷新工程 2、修改java代码 在Native.loadLibrary的调用前面增加 : System.setProperty("jna.debug_load", "true"); 确保调试的时候能够看到尽可能多的信息 3、设置断点--java 就设置到System.setProperty ("jna.debug_load", "true"); 或者任何调用jna前的代码 4、设置断点--c 在vs2015中设置断点到需要调试的代码上 5、调试 调试启动java程序,在断点断下来后,切换到 代码的自动生成 推荐使用jnaerator,下载最新版本,然后命令行执行: java -jar jnaerator-0.12-SNAPSHOT-20130727.jar -runtime JNA -mode

    1.2K20编辑于 2022-05-13
  • 来自专栏程序那些事

    java高级用法之:调用本地方法的利器JNA

    答案是肯定的,这就是今天要讲的JNAJNA初探 JNA的全称是Java Native Access,它为我们提供了一种更加简单的方式来访问本地的共享库资源,如果你使用JNA,那么你只需要编写相应的java代码即可,不需要编写JNI或者本地代码 /repository/net/java/dev/jna/jna/5.10.0/jna-5.10.0.jar! 两个部分分别对应的类是com.sun.jna.Native和com.sun.jna.NativeLibrary。 如果不想从classpath中查找,则可以设置jna.noclasspath=true。 如果不想从jna.jar文件中解压,则可以设置jna.nounpack=true。

    2.7K10编辑于 2022-03-28
  • 来自专栏10km的专栏

    jnaerator:java调用动态库的神器,JNA代码自动生成工具

    最近正为写调用动态库的事儿头痛,虽然我也会写JNI代码,但实在太麻烦,总想找个捷径,看了JNA相关资料后,发现用JNA所需要写的相关java代码其实都是很有规则的。 JNA代码生成 如下图目录结构,有两个dll,及相对应的头文件,我们这两个动态库为例说明如何用jnaerator来生成全套JNA代码。 \ -mode Maven \ -mavenGroupId net.gdface \ -mavenArtifactId cassdk_jna \ -o jna_code -library THFeature \ bin\THFeature.dll include\THFeature_i.h 参数说明: -runtime JNA 指定目标运行库为JNA 指定 maven项目的 artifactId-o jna_code 指定输出文件夹 jna_code-package net.gdface.jna 指定生成java代码的包名。

    5.2K10发布于 2019-05-25
  • 来自专栏程序那些事

    java高级用法之:在JNA中将本地方法映射到JAVA代码中

    简介 不管是JNI还是JNA,最终调用的都是native的方法,但是对于JAVA程序来说,一定需要一个调用native方法的入口,也就是说我们需要在JAVA方法中定义需要调用的native方法。 那么在JNA中有那些在JAVA代码中定义本地方法的方式呢? Library Mapping 要想调用本地的native方法,首选需要做的事情就是加载native的lib文件。 JNA中有两种Library 映射的方法,分别是interface和direct mapping。 性能考虑 上面我们提到了JNA的两种mapping方式,分别是interface mapping和direct mapping。 总结 JNA是调用native方法的利器,如果数量掌握的话,肯定是如虎添翼。 本文已收录于 http://www.flydean.com/03-jna-library-mapping/

    1.5K20编辑于 2022-04-13
  • 来自专栏全栈程序员必看

    java tess4j ddl_tess4j jna dll报错,求助

    C:\\Users\\Administrator\\Desktop\\eurotext.png”);//图片位置 ITesseract instance = new Tesseract(); // JNA Exception in thread “main” java.lang.UnsatisfiedLinkError: C:\Users\Administrator\AppData\Local\Temp\jna -146731693\jna6221012064005976035.dll: 拒绝访问。 at java.lang.Runtime.load0(Runtime.java:809) at java.lang.System.load(System.java:1086) at com.sun.jna.Native.loadNativeDispatchLibraryFromClasspath (Native.java:761) at com.sun.jna.Native.loadNativeDispatchLibrary(Native.java:736) at com.sun.jna.Native

    82210编辑于 2022-09-01
  • 来自专栏全栈程序员必看

    java键盘钩子_java 写的低级鼠标键盘钩子示例

    需要到 http://java.net/projects/jna/downloads下载 jna.jar 和 platform.jar (参考http://my.oschina.net/penngo/blog [代码][Java]代码 package jna_test; import com.sun.jna.platform.win32.*; import com.sun.jna.platform.win32 .WinUser.*; import com.sun.jna.platform.win32.WinDef.HMODULE; import com.sun.jna.platform.win32.WinDef.LRESULT ; import com.sun.jna.platform.win32.WinDef.WPARAM; import com.sun.jna.platform.win32.WinUser.HHOOK; import .BaseTSD.ULONG_PTR; import com.sun.jna.platform.win32.WinDef.HWND; import com.sun.jna.platform.win32.

    1.5K20编辑于 2022-08-23
领券