Java调用C程序 —— JNA框架

准备工作

直接在mvn仓库搜索jna下载对应jar包和依赖包

https://mvnrepository.com/

依赖包
jna-5.5.0.jar
jna-platform-5.5.0.jar

一、编写C代码

mylib.h文件

#ifndef _MYLIB_H_
#define _MYLIB_H_

// 加法运算
int add(int a, int b);

#endif

mylib.c文件

#include <stdio.h>
#include "mylib.h"

// 实现
int add(int a, int b) {
	printf("dll function add() called\n");
	return (a + b);
}

二、编译dll

执行以下命令得到dll后,得到dll动态链接库

> gcc -shared -o mylib.dll mylib.c

三、使用jna调用dll

创建Main.java

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

public class Main {

    public interface CLibrary extends Library{
        // DLL文件默认路径为项目根目录,若DLL文件存放在项目外,请使用绝对路径
        CLibrary INSTANCE = (CLibrary) Native.load("mylib.dll", CLibrary.class);
        // 声明将要调用的DLL中的方法
        int add(int a, int b);
    }

    public static void main(String[] args) {
        System.out.println("1 + 2 = " + CLibrary.INSTANCE.add(1, 2));
    }
}

为上述文件都在同一目录中

四、运行结果

> javac -Djava.ext.dirs=<jar路径> Main.java
> java -Djava.ext.dirs=<jar路径> Main

或者

> javac -cp jna-5.5.0.jar;jna-platform-5.5.0.jar Main.java
> java -cp jna-5.5.0.jar;jna-platform-5.5.0.jar; Main

结果为
dll function add() called
1 + 2 = 3

注意事项

出现java.lang.UnsatisfiedLinkError: %1 不是有效的 Win32 应用程序。

是因为jdk位数和dll位数不一致,换成一致的即可。

参考:

猜你喜欢

转载自blog.csdn.net/Necrolic/article/details/105695887
jna