<!-- https://mvnrepository.com/artifact/net.java.dev.jna/jna -->
<dependency>
<groupId>net.java.dev.jna</groupId>
<artifactId>jna</artifactId>
<version>5.12.1</version>
</dependency>
package com.example.test;
import com.sun.jna.Function;
import com.sun.jna.Library;
import com.sun.jna.Native;
import com.sun.jna.NativeLibrary;
import com.sun.jna.Platform;
public class TestSMS {
static NativeLibrary library = NativeLibrary.getInstance("C:\\Users\\kysx\\Desktop\\SMSDLL.dll");
/**
* 调用dll有返回值函数
*
* @param functionName 函数名
* @param clazz T类型Class
* @param params 入参
* @param <T> 返回类型
* @return dll函数返回值
*/
public static <T> T invoke(String functionName, Class<T> clazz, Object... params) {
Function function = library.getFunction(functionName);
Object invoke = function.invoke(clazz, params);
return clazz.cast(invoke);
}
/**
* 调用dll无返回值函数
*
* @param functionName 函数名
* @param params 入参
*/
public static void invoke(String functionName, Object... params) {
Function function = library.getFunction(functionName);
function.invoke(params);
}
/**
* 生成dll函数
*
* @param functionName 函数名
* @return dll函数
*/
public static Function function(String functionName) {
return library.getFunction(functionName);
}
/**
* 测试
*/
public static void main(String[] args) {
/**
* 参数:nPort 串口号 如1 则表示COM1
BaudRate 拨特率 115200
Parity 校验位 2
DataBits 数据位 8
StopBits停止位 0
FlowControl 流控制 0
Csca 短信中心号码,可以使用默认值,若设置则格式如:” +8613800000000”
返回值:1成功,0失败
*/
int nPort = 5;
int BaudRate = 57600;
int Parity=2;
int DataBits = 8;
int StopBits=0;
int FlowControl=0;
String csca="card";
int i = invoke("SMSStartService", Integer.class, nPort, BaudRate, Parity, DataBits, StopBits, FlowControl, csca);
System.out.println("输出的是:"+i);
}
/**
默认类型映射 - Java类型与C类型映射。
=====================
Java primitive types (and their object equivalents) map directly to the native C type of the same size.
<table>
<thead><td>Native Type</td><td>Size</td><td>Java Type</td><td>Common Windows Types</td></thead>
<tr><td>char</td><td>8-bit integer</td><td>byte</td><td>BYTE, TCHAR</td></tr>
<tr><td>short</td><td>16-bit integer</td><td>short</td><td>WORD</td></tr>
<tr><td>wchar_t</td><td>16/32-bit character</td><td>char</td><td>TCHAR</td></tr>
<tr><td>int</td><td>32-bit integer</td><td>int</td><td>DWORD</td></tr>
<tr><td>int</td><td>boolean value</td><td>boolean</td><td>BOOL</td></tr>
<tr><td>long</td><td>32/64-bit integer</td><td>NativeLong</td><td>LONG</td></tr>
<tr><td>long long</td><td>64-bit integer</td><td>long</td><td>__int64</td></tr>
<tr><td>float</td><td>32-bit FP</td><td>float</td><td></td></tr>
<tr><td>double</td><td>64-bit FP</td><td>double</td><td></td></tr>
<tr><td>char*</td><td>C string</td><td>String</td><td>LPCSTR</td></tr>
<tr><td>void*</td><td>pointer</td><td>Pointer</td><td>LPVOID, HANDLE, LP<i>XXX</i></td></tr>
</table>
Unsigned types use the same mappings as signed types. C enums are usually interchangeable with "int".
*/
public String DefaultTypeMappings;
}