Bonjour, je voudrais faire appelle a la fonction GlobalMemoryStatusEx de la librairie Kernel32.dll
https://docs.microsoft.com/en-us/win...memorystatusex
pour cela j'ai écrit le code suivant:
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41 package gestion; import com.sun.jna.*; import com.sun.jna.win32.StdCallLibrary; public interface CHelloWorld extends StdCallLibrary { @Structure.FieldOrder({ "dwLength", "dwMemoryLoad","ullTotalPhys", "ullAvailPhys", "ullTotalPageFile", "ullAvailPageFile", "ullTotalVirtual", "ullAvailVirtual", "ullAvailExtendedVirtual" }) public static class MEMORYSTATUSEX extends Structure { public static class ByReference extends MEMORYSTATUSEX implements Structure.ByReference {} public int dwLength; public int dwMemoryLoad; public int ullTotalPhys; public int ullAvailPhys; public int ullTotalPageFile; public int ullAvailPageFile; public int ullTotalVirtual; public int ullAvailVirtual; public int ullAvailExtendedVirtual; } @Structure.FieldOrder({ "wYear", "wMonth", "wDayOfWeek", "wDay", "wHour", "wMinute", "wSecond", "wMilliseconds" }) public static class SYSTEMTIME extends Structure { public short wYear; public short wMonth; public short wDayOfWeek; public short wDay; public short wHour; public short wMinute; public short wSecond; public short wMilliseconds; } public void GetSystemTime(SYSTEMTIME result); public boolean GlobalMemoryStatusEx(MEMORYSTATUSEX.ByReference lpBuffer); public CHelloWorld INSTANCE = (CHelloWorld) Native.load("kernel32", CHelloWorld.class); }J'appelle la fonction GetSystemTime cela me renvoie quelque chose
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12 public class main { public static void main(String[] args) throws IOException, InterruptedException { CHelloWorld.SYSTEMTIME time = new CHelloWorld.SYSTEMTIME(); CHelloWorld.INSTANCE.GetSystemTime(time); System.out.println("GetSystemTime" + time.wDay); CHelloWorld.MEMORYSTATUSEX.ByReference e3ref = new CHelloWorld.MEMORYSTATUSEX.ByReference(); e3ref.dwLength=36; System.out.println("GlobalMemoryStatusEx"); System.out.println(CHelloWorld.INSTANCE.GlobalMemoryStatusEx(e3ref)); } }
quand c'est GlobalMemoryStatusEx cela renvoie false
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3 CHelloWorld.INSTANCE.GetSystemTime(time); System.out.println("GetSystemTime" + time.wDay);
J ai plusieurs questions:
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3 System.out.println("GlobalMemoryStatusEx"); System.out.println(CHelloWorld.INSTANCE.GlobalMemoryStatusEx(e3ref));
Pour recupere la taille de ma structure e3ref.dwLength est-ce qui n'a pas un équivalent en java de sizeof() en c je dois le pâsser en parametre pour la fonction GlobalMemoryStatusEx
Sinon pour la conversion de type natif/java, est ce que dwordLong devient int car j'ai plusieurs champs de ce type dans ma structure
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4 CHelloWorld.MEMORYSTATUSEX.ByReference e3ref = new CHelloWorld.MEMORYSTATUSEX.ByReference(); e3ref.dwLength=36; System.out.println("GlobalMemoryStatusEx"); System.out.println(CHelloWorld.INSTANCE.GlobalMemoryStatusEx(e3ref));
documentation pour la conversion https://github.com/java-native-acces...ww/Mappings.md
Partager