Я пытался использовать метод из WIN32 dll, не включенный в JNA.Добавление другого метода в JNA Class Java (Kernel32)
Метод является GetProductInfo
Я стараюсь это в отдельный проект и работы:
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());
мне нужен результат этого метода !!!
IntByReference dwType = new IntByReference();
Kernel32.INSTANCE.GetProductInfo(6,0,0,0,dwType);
switch (dwType.getValue()) {
//... code
}
Как я могу включить новый метод для Kernerl32 (уже определено в ЮНА -> com.sun.jna.platform.win32.Kernel32)?
Спасибо, работы решения с броскомами -> (Kernel32) –