Chiamare CreateFile usando JNA dà insoddisfatta Tinkerror: Errore di ricerca Funzione "CreateFile": la procedura specificata non è stata trovata

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

  •  29-10-2019
  •  | 
  •  

Domanda

Sto cercando di chiamare Win32 CreateFile Funzione su Windows 7 che utilizza JNA con l'obiettivo è fare un'implementazione Java di questa risposta Per verificare se un file è in uso da un altro processo.

Il codice che ho finora è:

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

Tuttavia, eseguire questo aumenta l'eccezione:

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

Se cambio "kernel32" nel loadLibrary Chiama a qualcosa di non valido, invece di ottenere The specified module could not be found Quindi questo suggerisce che la DLL si trova correttamente dal percorso della biblioteca, ma c'è qualcosa che non va nel modo in cui chiamo CreateFile.

Qualche idea su cosa sto facendo di sbagliato?


CreateFile è definito in com.sun.jna.examples.win32.Kernel32 come:

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

Nessuna soluzione corretta

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top