JNA数据类型的对应以及使用

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 stringStringLPTCSTR
void*pointerPointerLPVOID, HANDLE, LPXXX
<!--Java JNA -->
<dependency>
    <groupId>net.java.dev.jna</groupId>
    <artifactId>jna</artifactId>
    <version>4.1.0</version>
</dependency>

引入JNA:
import com.sun.jna.;
import com.sun.jna.ptr.
;
1.构造JNA模拟类
C语言函数:

void function1(int a, int b, const unsigned char* data);

char * function2(float * pVal, char * outString);

void function3(Rect * pRect, Rect rect);
JNA模拟:

public interface MyLibTest extends Library {
//定义结构体
public static class Rect extends Structure {
        //公共字段的顺序,必须与C语言中的结构的顺序一致,否则会报错!
        public int left;
        public int top;
        public int right;
        public int bottom;
        //结构体传指针
        public static class ByReference extends Rect implements Structure.ByReference { }
        //结构体传值
        public static class ByValue extends Rect implements Structure.ByValue{ }
        
        @Override
        protected List getFieldOrder() {
            return Arrays.asList(new String[]{"left", "top", "right", "bottom"});
        }
 
         //加载库文件
         MyLibTest INSTANCE = (MyLibTest) Native.loadLibrary("C:\libTest\CLib.dll",MyLibTest.class);
 
         //函数模拟
         void function1(int a, int b, char[] data);
         String function2(FloatByReference fRef, char [] outString);
         void function3(Rect.ByReference pRect, Rect.ByValue rect);
}
调用方式:
char[] arr1 = new char[数组大小];
function1(1, 2, arr1);
 
char[] arr2 = new char[数组大小];
FloatByReference fRef = new FloatByReference(0.1F);
String result = function2(fRef, arr2);
Rect.ByReference pRect = new Rect.ByReference(); //指针对象
Rect.ByValue rect =  new Rect.ByValue(); //传值对象
function3(pRect, rect);

2.JNA模拟C语言数组
C语言函数:

void function1(char * data)

void function2(const unsigned char* data)

JNA模拟:

void function1(char[] data) 或者 void function1(byte[] data) 
void function2(char[] data) 或者 void function2(byte[] data) 
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值