Adding another method to JNA Class Java (Kernel32)(向 JNA Class Java (Kernel32) 添加另一种方法)
问题描述
我试图使用来自 WIN32 dll 的方法,但 JNA 中没有.
I was trying to use a method from WIN32 dll, not included in JNA.
方法是GetProductInfo
我在单独的项目和工作中尝试这个:
I try this in separate project and work:
public interface Kernel32 extends Library {
public boolean GetProductInfo(int dwOSMajorVersion,int dwOSMinorVersion,
int dwSpMajorVersion, int dwSpMinorVersion, IntByReference pdwReturnedProductType);
}
使用..
Kernel32 lib = (Kernel32) Native.loadLibrary("kernel32", Kernel32.class);
IntByReference dwType = new IntByReference();
lib.GetProductInfo(6,0,0,0,dwType);
switch (dwType.getValue()) {
// Something
}
但我需要使用 JNA
import com.sun.jna.platform.win32.Kernel32;
import com.sun.jna.platform.win32.User32;
import com.sun.jna.platform.win32.WinBase;
import com.sun.jna.platform.win32.WinDef;
import com.sun.jna.platform.win32.WinNT;
import com.sun.jna.platform.win32.WinUser;
public interface Kernel32 extends Library {
Kernel32 INSTANCE = (Kernel32)Native.loadLibrary("kernel32", Kernel32.class);
// I need to insert this method!!!
public boolean GetProductInfo(int dwOSMajorVersion,int dwOSMinorVersion,
int dwSpMajorVersion, int dwSpMinorVersion, IntByReference pdwReturnedProductType);
// This snippet I think should not Needed,
//but if I remove this code this methods will not be recognized
//but if I leave this code, it is not working properly!!!
public void GetSystemInfo(WinBase.SYSTEM_INFO lpSystemInfo);
public boolean GetVersionExA(WinNT.OSVERSIONINFOEX lpVersionInfo);
public boolean GetVersionExA(WinNT.OSVERSIONINFO lpVersionInfo);
}
使用代码:
WinNT.OSVERSIONINFOEX osviex = new WinNT.OSVERSIONINFOEX();
WinNT.OSVERSIONINFO osvi = new WinNT.OSVERSIONINFO();
WinBase.SYSTEM_INFO si = new WinBase.SYSTEM_INFO();
String major = "", sub = "";
boolean bOsVersionInfoEx = Kernel32.INSTANCE.GetVersionExA(osviex);
boolean bOsVersionInfo = Kernel32.INSTANCE.GetVersionExA(osvi);
Kernel32.INSTANCE.GetSystemInfo(si);
// If I declare newly (the old methods), these will not work fine (Bad result)!!!
System.out.println("osviex.dwPlatformId.intValue()"+osviex.dwPlatformId.intValue());
System.out.println("osviex.dwMajorVersion.intValue()"+osviex.dwMajorVersion.intValue());
System.out.println("osvi.dwPlatformId.intValue()"+osvi.dwPlatformId.intValue());
System.out.println("osvi.dwMajorVersion.intValue()"+osvi.dwMajorVersion.intValue());
我需要这个方法的结果!!!
I need the result of this method!!!
IntByReference dwType = new IntByReference();
Kernel32.INSTANCE.GetProductInfo(6,0,0,0,dwType);
switch (dwType.getValue()) {
//... code
}
如何在 Kernerl32 中包含一个新方法(已在 JNA -> com.sun.jna.platform.win32.Kernel32 中定义)?
推荐答案
这是扩展 JNA 平台映射定义的库的方式:
This is how you extend a library defined by JNA's platform mappings:
public interface Kernel32 extends com.sun.jna.platform.win32.Kernel32 {
Kernel32 INSTANCE = (Kernel32)Native.loadLibrary("kernel32", Kernel32.class, com.sun.jna.win32.W32APIOptions.DEFAULT_OPTIONS);
boolean GetProductInfo(int dwOSMajorVersion, int dwOSMinorVersion, int dwSpMajorVersion, int dwSpMinorVersion, IntByReference pdwReturnedProductType);
}
这篇关于向 JNA Class Java (Kernel32) 添加另一种方法的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持编程学习网!
本文标题为:向 JNA Class Java (Kernel32) 添加另一种方法
基础教程推荐
- REST Web 服务返回 415 - 不支持的媒体类型 2022-01-01
- 如何对 Java Hashmap 中的值求和 2022-01-01
- 修改 void 函数的输入参数,然后读取 2022-01-01
- 无法复制:“比较方法违反了它的一般约定!" 2022-01-01
- Spring AOP错误无法懒惰地为此建议构建thisJoinPoin 2022-09-13
- Struts2 URL 无法访问 2022-01-01
- 问题http://apache.org/xml/features/xinclude测试日志4j 2 2022-01-01
- RabbitMQ:消息保持“未确认"; 2022-01-01
- 存储 20 位数字的数据类型 2022-01-01
- 使用堆栈算法进行括号/括号匹配 2022-01-01
