资讯专栏INFORMATION COLUMN

一个简单的JNA使用例子

winterdawn / 2418人阅读

摘要:提供了这个技术来实现调用和程序,但实现起来比较麻烦,所以后来公司在的基础上实现了一个框架使用这个框架可以减轻程序员的负担,使得调用和容易很多。

使用JAVA语言开发程序比较高效,但有时对于一些性能要求高的系统,核心功能可能是用C或者C++语言编写的,这时需要用到JAVA的跨语言调用功能。JAVA提供了JNI这个技术来实现调用C和C++程序,但JNI实现起来比较麻烦,所以后来SUN公司在JNI的基础上实现了一个框架——JNA
使用这个框架可以减轻程序员的负担,使得JAVA调用C和C++容易很多。以下例子来源于JNA的官方文档,有兴趣研究的同学可以到官网查看更多的例子:

import com.sun.jna.Library;
import com.sun.jna.Native;
import com.sun.jna.Platform;

/** Simple example of JNA interface mapping and usage. */
public class HelloWorld {

    // This is the standard, stable way of mapping, which supports extensive
    // customization and mapping of Java to native types.

    public interface CLibrary extends Library {
        CLibrary INSTANCE = (CLibrary) Native.loadLibrary(
                        (Platform.isWindows() ? "msvcrt" : "c"), CLibrary.class);

        /*
         * 声明一个跟C语言的printf()一样的方法,参数类型要匹配
         * C语言的printf()方法原型如下:
         * int __cdecl printf(const char * __restrict__ _Format,...);
         */
        void printf(String format, Object... args);
    }

    public static void main(String[] args) {
        //调用C语言的printf()方法
        CLibrary.INSTANCE.printf("Hello, World->%d",2014);
    }
}

程序输出结果如下:

  

Hello, World->2014

文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。

转载请注明本文地址:https://www.ucloud.cn/yun/64023.html

相关文章

  • Java 外部函数接口:JNI, JNA, JNR

    摘要:我们知道,发起函数调用,需要构造一个栈帧。构造栈帧的具体实现细节的选择,被称为调用惯例。要想完成这个函数调用逻辑,就要运行时构造栈帧,生成参数压栈和清理堆栈的工作。目前,几乎支持全部常见的架构。 原文:http://nullwy.me/2018/01/java...如果觉得我的文章对你有用,请随意赞赏 遇到的问题 前段时间开发的时候,遇到一个问题,就是如何用 Java 实现 chdir...

    pubdreamcc 评论0 收藏0
  • Java调用dll文件

    摘要:目录创建创建项目与工具项目与工具步骤与代码步骤与代码使用调用使用调用项目与工具项目与工具步骤与代码步骤与代码实际效果实际效果参考链接参考链接创建项目与工具步骤与代码使用创建动态链接库项目设置项目名与项目 目录 1 C++创建dll 1.1 项目与工具 1.2 步骤与代码 2 Java使用JN...

    Jeff 评论0 收藏0
  • Head First JNA

    摘要:与动态链接库配套的,会有相应的头文件,来声明动态链接库中对外暴露的方法。结构体映射结构体映射类编写类,继承,表示这个一个结构体。声明字段与,并且设置访问属性为。计算机状态结构体结构体指针结构体具体的值至此,功能完成。 问题描述 虚拟化项目,需要用到Java调用原生代码的技术,我们使用的是开源库JNA(Java Native Access)。 Native(C/C++)代码,编译生成动态...

    YPHP 评论0 收藏0
  • java如何获取hdd序列号

    摘要:序在里头如何获取硬盘的序列号呢,这里涉及了跨平台的问题,不同的操作系统的查看命令不一样,那么里头如何去适配呢。这里使用了这个项目来获取。使用的是的方式而不是的形式来进行本地调用的。获取方法,,,和之间的区别是什么,它们的调用效率怎么排名 序 在java里头如何获取硬盘的序列号呢,这里涉及了跨平台的问题,不同的操作系统的查看命令不一样,那么java里头如何去适配呢。这里使用了oshi这个...

    jzman 评论0 收藏0
  • Elastic Search搜索引擎在SpringBoot中实践

    摘要:注本文首发于公众号,可长按或扫描下面的小心心来订阅实验环境版本版本首先当然需要安装好环境,最好再安装上可视化插件来便于我们直观地查看数据。 showImg(https://segmentfault.com/img/remote/1460000015723674); 注: 本文首发于 My 公众号 CodeSheep ,可 长按 或 扫描 下面的 小心心 来订阅 ↓ ↓ ↓ showI...

    Me_Kun 评论0 收藏0

发表评论

0条评论

最新活动
阅读需要支付1元查看
<