使用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 Type | Size | Java Type | Common Windows Types |
|---|---|---|---|
| char | 8-bit integer | byte | BYTE, TCHAR |
| short | 16-bit integer | short | WORD |
| wchar_t | 16/32-bit character | char | TCHAR |
| int | 32-bit integer | int | DWORD |
| int | boolean value | boolean | BOOL |
| long | 32/64-bit integer | NativeLong | LONG |
| long long | 64-bit integer | long | __int64 |
| float | 32-bit FP | float | |
| double | 64-bit FP | double | |
| char* | C string | String | LPCSTR |
| void* | pointer | Pointer | LPVOID, HANDLE, LPXXX |
常见的报错
- Exception in thread "main" java.lang.UnsatisfiedLinkError: %1 is not a valid Win32 application. 一般是jdk版本的位数和dll的位数不匹配导致的,比如64位jdk调用32位的dll.