0%

JNA

文章字数:251,阅读全文大约需要1分钟

java native interface JNA(Java Native Access)框架是一个开源的Java框架,是SUN公司主导开发的,建立在经典的JNI的基础之上的一个框架

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37

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

public class JNADllCall {

/**
* DLL动态库调用方法
* stdCall模式,调用完内存清除
*/
public interface StdCallDll extends StdCallLibrary {
// DLL文件默认路径为项目根目录,若DLL文件存放在项目外,请使用绝对路径
StdCallDll INSTANCE = (StdCallDll) Native.loadLibrary("dllName",StdCallDll.class);// 加载动态库文件

// 声明将要调用的DLL中的方法(可以是多个方法)
void printf(String format, Object... args);
}

/**
* DLL动态库调用方法2
* cdecl模式,调用完内存信息保留,数据由调用者清除
*/
public interface CLibrary extends Library {
// 做个判断,是windos下就加载msvcrt.dll ,否则是 c.so
CLibrary INSTANCE = (CLibrary) Native.loadLibrary((Platform.isWindows() ? "msvcrt" : "c"),
CLibrary.class);

void printf(String format, Object... args);
}

public static void main(String[] args) {
StdCallDll.INSTANCE.printf("Hello, World!\n");
CLibrary.INSTANCE.printf("Hello, World\n");
}
}