JNA简单范例

简介: JNA简单范例
  • C头文件
1. #ifndef __JNATEST_H__
2. #define __JNATEST_H__
3. 
4. #define LOG_HERE() printf("%s-%d\n", __func__, __LINE__)
5. 
6. void test_jna();
7. 
8. #endif

C代码

#include <stdio.h>
#include "jnatest.h"
void test_jna()
{
    LOG_HERE();
    printf("called from JAVA\n");
}

JAVA代码

import com.sun.jna.Library;
import com.sun.jna.Native;
import com.sun.jna.Platform;
public class JnaTest
{
  //继承Library,用于加载库文件  
  public interface CLibrary extends Library
    {
  CLibrary INSTANCE = (CLibrary) Native.loadLibrary(
            (Platform.isWindows() ? "msvcrt" : "c"), CLibrary.class);
  // 声明一个跟C语言的printf()一样的方法,
  void printf(String format, Object... args);
  } 
  public interface TestLibrary extends Library
    {
  TestLibrary INSTANCE = (TestLibrary) Native.loadLibrary("jnatest", TestLibrary.class);
        void test_jna();
  } 
  public static void main(String[] args)
    {
  //调用  
  CLibrary.INSTANCE.printf("From JAVA To C, year=%d\n", 2022);
        TestLibrary.INSTANCE.test_jna();
  }
}

安装依赖库

sudo apt install -y openjdk-8-jdk
sudo apt install -y libjna-java
sudo apt install -y libjna-platform-java

编译

gcc -fPIC -shared -o libjnatest.so jnatest.c
sudo ldconfig
javac -extdirs /usr/share/java JnaTest.java

测试

USJ_DIR=/usr/share/java
CLASS_DIRS=.
CLASS_DIRS=${CLASS_DIRS}:${USJ_DIR}/jna.jar
CLASS_DIRS=${CLASS_DIRS}:${USJ_DIR}/jna-platform.jar
java  \
    -cp ${CLASS_DIRS} \
    JnaTest
目录
相关文章
|
Java 测试技术 C#
【开发者笔记】java 利用jna调用c#的dll
          一、需求阐述:   如果我们的项目利用c#开发,到了开发后期需要和java组进行合作,其中有一部分业务逻辑利用c#已经code completed,那么我们可能会考虑用java来调用现成的c#dll实现需求。
17417 0
|
6月前
|
Java 测试技术 Maven
Java编译器注解运行和自动生成代码问题之在编译时需要设置-proc:none参数问题如何解决
Java编译器注解运行和自动生成代码问题之在编译时需要设置-proc:none参数问题如何解决
JNA简单范例
JNA简单范例
97 0
|
Java 计算机视觉
OpenCV最简JAVA版范例
OpenCV最简JAVA版范例
150 0
|
C#
C#调用dll代码范例
C#调用dll代码范例
123 0
|
Java 自然语言处理 索引
【Java学习笔记之十八】Javadoc注释的用法
Javadoc注释的用法 Java 文档// 注释一行/* ...... */ 注释若干行/** ...... */ 注释若干行,并写入 javadoc 文档通常这种注释的多行写法如下:/*** .........* .........*/javadoc -d 文档存放目录 -author -version 源文件名.java这条命令编译一个名为"源文件名.java"的 java 源文件,并将生成的文档存放在"文档存放目录"指定的目录下,生成的文档中 index.html 就是文档的首页。
2671 0
|
Java Linux Android开发
java高级用法之:JNA中的Structure
前面我们讲到了JNA中JAVA代码和native代码的映射,虽然可以通过TypeMapper来将JAVA中的类型和native中的类型进行映射,但是native中的数据类型都是基础类型,如果native中的数据类型是复杂的struct类型该如何进行映射呢? 不用怕,JNA提供了Structure类,来帮助我们进行这些映射处理。
|
监控 Java Linux
用JNA实现JAVA调用C语言中遇到的问题
因为计网大作业要求写一个网络流量监控系统,然后查阅资料后发现,计算机网络领域其实规定了了一组API接口规范供操作系统实现,这组API接口规范叫做PCAP(Packet Capture),Windows用winpcap(查阅后其实已经废弃了,现在用的是npcap)实现了该接口,linux用libpcap实现了该接口,由于个人比较喜欢用Java,所以必不可少的就是要养Java调用C了,这次调用C遇到了不少问题,这里说一下。
233 0