IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Entrée/Sortie Java Discussion :

Jna fonction qui renvoie rien


Sujet :

Entrée/Sortie Java

  1. #1
    Nouveau membre du Club
    Homme Profil pro
    Analyse système
    Inscrit en
    Mai 2019
    Messages
    22
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Puy de Dôme (Auvergne)

    Informations professionnelles :
    Activité : Analyse système

    Informations forums :
    Inscription : Mai 2019
    Messages : 22
    Points : 25
    Points
    25
    Par défaut Jna fonction qui renvoie rien
    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);
    }
    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));
        }
    }
    J'appelle la fonction GetSystemTime cela me renvoie quelque chose

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    CHelloWorld.INSTANCE.GetSystemTime(time);
    System.out.println("GetSystemTime" + time.wDay);
    quand c'est GlobalMemoryStatusEx cela renvoie false
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    System.out.println("GlobalMemoryStatusEx");
    System.out.println(CHelloWorld.INSTANCE.GlobalMemoryStatusEx(e3ref));
    J ai plusieurs questions:

    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
    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));
    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

    documentation pour la conversion https://github.com/java-native-acces...ww/Mappings.md

  2. #2
    Nouveau membre du Club
    Homme Profil pro
    Analyse système
    Inscrit en
    Mai 2019
    Messages
    22
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Puy de Dôme (Auvergne)

    Informations professionnelles :
    Activité : Analyse système

    Informations forums :
    Inscription : Mai 2019
    Messages : 22
    Points : 25
    Points
    25
    Par défaut
    En faite, il y deja des les structures native dans le package
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    import com.sun.jna.platform.win32.WinBase;
    en utilisant la fonction marche

    Code
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
     
    import com.sun.jna.*;
    import com.sun.jna.win32.StdCallLibrary;
    import com.sun.jna.win32.W32APIOptions;
    import com.sun.jna.platform.win32.WinBase.MEMORYSTATUSEX;
    public interface CHelloWorld extends StdCallLibrary {
        public boolean GlobalMemoryStatusEx(MEMORYSTATUSEX lpBuffer);
        public CHelloWorld INSTANCE = (CHelloWorld)
                Native.load("kernel32",
                        CHelloWorld.class,W32APIOptions.DEFAULT_OPTIONS);
    }

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    WinBase.MEMORYSTATUSEX e3ref = new WinBase.MEMORYSTATUSEX();
            System.out.println(CHelloWorld.INSTANCE.GlobalMemoryStatusEx(e3ref));
            System.out.println("GlobalMemoryStatusEx" + e3ref.dwMemoryLoad);

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Fonction qui renvoie un tableau?
    Par elm dans le forum C
    Réponses: 23
    Dernier message: 21/12/2005, 12h44
  2. Réponses: 31
    Dernier message: 25/10/2005, 18h26
  3. Fonction qui renvoie erreur dans mon état
    Par Daniel MOREAU dans le forum Access
    Réponses: 1
    Dernier message: 20/10/2005, 12h40
  4. [bioinfo] fonction qui renvoie chaîne à autre fonction
    Par perlaud dans le forum Bioinformatique
    Réponses: 11
    Dernier message: 16/07/2004, 15h06
  5. [VB6] Comment faire une fonction qui renvoie 2 résultats
    Par tazarine dans le forum VB 6 et antérieur
    Réponses: 10
    Dernier message: 15/01/2004, 00h13

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo