Llamar a CreateFile usando JNA proporciona insatisfiedlinkError: Función de búsqueda de errores 'CreateFile': el procedimiento especificado no se pudo encontrar

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

  •  29-10-2019
  •  | 
  •  

Pregunta

Estoy tratando de llamar a Win32's CreateFile función en Windows 7 utilizando JNA con el objetivo es hacer una implementación de Java de esta respuesta para verificar si un archivo está en uso por otro proceso.

El código que tengo hasta ahora es:

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

Sin embargo, ejecutar esto plantea la excepción:

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

Si cambio "kernel32" en el loadLibrary Llama a algo inválido y luego obtengo The specified module could not be found Entonces esto sugiere que la DLL se encuentra correctamente en la ruta de la biblioteca, pero hay algo mal en la forma en que estoy llamando CreateFile.

¿Alguna idea de lo que estoy haciendo mal?


CreateFile se define en com.sun.jna.examples.win32.Kernel32 como:

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

No hay solución correcta

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top