使用JNA 调用WINDOWS API
Posted zhangjianying
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了使用JNA 调用WINDOWS API相关的知识,希望对你有一定的参考价值。
在我接触JNA之前一直以为调用本地链接库函数的时候一定要借助JNI或者SWT来实现,一日中无意看到JNA,发现它也可以实现这类调用,于是下回来按网站上的例子试试了 还不错,因此还有点兴趣了,于是又自己写了 2个发挥了一下。
GetLogicalDriveStringsA【获取本地系统逻辑盘符】
GetSystemDirectoryA 【获取系统目录】
public
interface
Kernel32
extends
Library {
Kernel32 INSTANCE = (Kernel32) Native.loadLibrary( " kernel32 " , Kernel32. class );
int GetLogicalDriveStringsA( int length, byte [] buffer);
int GetSystemDirectoryA( byte [] buffer, int size);
}
Kernel32 INSTANCE = (Kernel32) Native.loadLibrary( " kernel32 " , Kernel32. class );
int GetLogicalDriveStringsA( int length, byte [] buffer);
int GetSystemDirectoryA( byte [] buffer, int size);
}
调用的方式为:
public
class
MainDemo
...
{
public static void main(String[] args) ...{
Kernel32 lib = Kernel32.INSTANCE;
byte[] buffer2=new byte[100];
lib.GetLogicalDriveStringsA(buffer2.length/2,buffer2);
for(byte bt : buffer2)
...{
System.out.print((char)bt);
}
System.out.println();
byte[] buffer = new byte[50];
lib.GetSystemDirectoryA(buffer, 50);
for(byte bt : buffer)
...{
System.out.print((char)bt);
}
}
}
public static void main(String[] args) ...{
Kernel32 lib = Kernel32.INSTANCE;
byte[] buffer2=new byte[100];
lib.GetLogicalDriveStringsA(buffer2.length/2,buffer2);
for(byte bt : buffer2)
...{
System.out.print((char)bt);
}
System.out.println();
byte[] buffer = new byte[50];
lib.GetSystemDirectoryA(buffer, 50);
for(byte bt : buffer)
...{
System.out.print((char)bt);
}
}
}
以上是关于使用JNA 调用WINDOWS API的主要内容,如果未能解决你的问题,请参考以下文章
在 Windows 上使用 JNA 调用 __cpuid 函数
windows下使用JNA在java中调用golang生成的dll
Java JNA 本机库调用 NoClassDefFoundError