Appeler CreenEFile à l'aide de JNA donne unpaviedLinkerror: Erreur de recherche de fonction «CreateFile»: la procédure spécifiée n'a pas pu être trouvée

StackOverflow https://stackoverflow.com/questions/7399862

  •  29-10-2019
  •  | 
  •  

Question

J'essaye d'appeler Win32 CreateFile Fonction sur Windows 7 en utilisant JNA dans le but étant de faire une implémentation Java de Cette réponse pour vérifier si un fichier est utilisé par un autre processus.

Le code que j'ai jusqu'à présent est:

import com.sun.jna.Native;
import com.sun.jna.examples.win32.Kernel32;

public class CreateFileExample {

    static int GENERIC_ACCESS = 268435456;
    static int EXCLUSIVE_ACCESS = 0;
    static int OPEN_EXISTING = 3;

    public static void main(String[] args) {
        Kernel32 kernel32 = 
            (Kernel32) Native.loadLibrary("kernel32", Kernel32.class);
        kernel32.CreateFile("c:\\file.txt", GENERIC_ACCESS, EXCLUSIVE_ACCESS,
            null, OPEN_EXISTING, 0, null);
    }
}

Cependant, la gestion de cela augmente l'exception:

java.lang.UnsatisfiedLinkError: Error looking up function 'CreateFile': The specified procedure could not be found.

Si je change "kernel32" dans le loadLibrary appel à quelque chose d'invalide alors je reçois à la place The specified module could not be found Cela suggère donc que la DLL se trouve correctement sur le chemin de la bibliothèque, mais il y a quelque chose qui ne va pas avec la façon dont j'appelle CreateFile.

Des idées que je fais de mal?


CreateFile est défini dans com.sun.jna.examples.win32.Kernel32 comme:

public abstract com.sun.jna.examples.win32.W32API.HANDLE CreateFile(
    java.lang.String arg0,
    int arg1,
    int arg2,
    com.sun.jna.examples.win32.Kernel32.SECURITY_ATTRIBUTES arg3,
    int arg4,
    int arg5,
    com.sun.jna.examples.win32.W32API.HANDLE arg6);

Pas de solution correcte

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top