JNA java调用dll

<!-- 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;
}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

௸ೄ流年ೄ೨

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值