Java 调用Dll文件

235 阅读1分钟

使用Jna技术

jna下载地址:github.com/java-native…

调用方法

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

public interface XXX extends Library {
    XXX INSTANCE = (XXX) Native.load("dll的name", XXX.class);  
    
    /**
    * value: 方法的返回类型
    * funcation: DLL中的方法,名称保持一致
    * parameters:方法传入的参数(参数需要和C中进行相互对应)
    */
    value function(parameters)
}

XX a = XX.INSTANCE;
value = a.function

Java和C++的类型之间的相互转换:

Native TypeSizeJava TypeCommon Windows Types
char8-bit integerbyteBYTE, TCHAR
short16-bit integershortWORD
wchar_t16/32-bit charactercharTCHAR
int32-bit integerintDWORD
intboolean valuebooleanBOOL
long32/64-bit integerNativeLongLONG
long long64-bit integerlong__int64
float32-bit FPfloat
double64-bit FPdouble
char*C stringStringLPCSTR
void*pointerPointerLPVOID, HANDLE, LPXXX

常见的报错

  1. Exception in thread "main" java.lang.UnsatisfiedLinkError: %1 is not a valid Win32 application. 一般是jdk版本的位数和dll的位数不匹配导致的,比如64位jdk调用32位的dll.