Visualizzazione dei risultati da 1 a 3 su 3

Discussione: [JNI] trovare la DLL

  1. #1
    Utente di HTML.it
    Registrato dal
    Oct 2007
    Messaggi
    331

    [JNI] trovare la DLL

    Salve a tutti, ho una classe java cosi' definita:

    codice:
    package it.serialLibJNI;
    
    public class SerialLibJNI {
    	public native int openConnection(int device, int baud, int parityCheck, int rtsFlowControl); 
    	public native int closeConnection();
    	public native int writeMessage(byte[] msg, int tot);
    	public native byte[] readMessage(int tot);
    		  
    	static{ 
    	 System.load("D://ProgettiSandro//lib//SerialProtocolLib.dll"); 
    	} 	  
    	
    }
    Che utilizza la dll SerialProtocolLib.dll scritta in C++ con Visual Studio 2005.
    Accedendo alla dll con System.load e istanziando la classe in un'altra con il main tutto funziona.
    Io vorrei pero' usare la loadLibrary.

    Se nella classe io scrivo:

    codice:
                static{ 
    	 System.loadLibrary("D://ProgettiSandro//lib//SerialProtocolLib.dll"); 
    	}
    Mi viene presentato quest'errore:

    Exception in thread "main" java.lang.UnsatisfiedLinkError: no D://ProgettiSandro//lib//SerialProtocolLib.dll in java.library.path
    at java.lang.ClassLoader.loadLibrary(Unknown Source)
    at java.lang.Runtime.loadLibrary0(Unknown Source)
    at java.lang.System.loadLibrary(Unknown Source)
    at it.serialLibJNI.SerialLibJNI.<clinit>(SerialLibJNI .java:10)
    at it.serialLibJNI.ProvaLib.main(ProvaLib.java:20)

    Domanda 1)
    come faccio ad usare la loadLibrary? Dove devo mettere la dll? Io sto lavorando su Eclipse 3.3.1

    Domanda 2)
    io vorrei fare un jar con la classe di cui sopra e la DLL in modo da mettere il jar in un progetto e usare i metodi della classe che, tramite JNI, accedono alla dll: si puo' fare? Come devo inserire la dll nel jar?

    Ciao e grazie a chi rispondera'
    Sandro

  2. #2
    Lavorai su JNI molto tempo fa, ma ricordo che copiai le librerie native all'interno di una cartella del JDK. Infatti da allora Eclipse non mi dava più errori (ti ricordo che Eclipse crea nella sua cartella di installazione un link alla VirtualMachine)
    Gutta cavat lapidem
    [La goccia scava la pietra]
    ***
    (Ovidio)

  3. #3
    Utente di HTML.it L'avatar di andbin
    Registrato dal
    Jan 2006
    residenza
    Italy
    Messaggi
    18,284

    Re: [JNI] trovare la DLL

    Originariamente inviato da DarthSandr
    System.loadLibrary("D://ProgettiSandro//lib//SerialProtocolLib.dll");
    [/CODE]
    come faccio ad usare la loadLibrary? Dove devo mettere la dll?
    La sai la differenza tra load() e loadLibrary()??? (la spiega la documentazione, tra l'altro ... leggerla?).
    A load() si deve passare un path completo, con tanto di estensione del file. A loadLibrary() si passa il solo nome della libreria senza estensione e la "mappatura" del nome di libreria su uno specifico nome di file/estensione è fatta in modo system-dependent.

    La cosa migliore quindi è quella di fare:

    System.loadLibrary("SerialProtocolLib");

    E fare in modo che sia il sistema a trovare la libreria. E questo vuol dire che è sufficiente che sia in una directory che si trova in PATH o comunque che secondo le regole del S.O. possa essere trovata.
    Quindi NON deve necessariamente essere nella stessa directory del tuo progetto.

    Originariamente inviato da DarthSandr
    io vorrei fare un jar con la classe di cui sopra e la DLL in modo da mettere il jar in un progetto e usare i metodi della classe che, tramite JNI, accedono alla dll: si puo' fare?
    Cioè il progetto A usa il jar B che è quello che sfrutta JNI con la DLL?? Ovvio che si può. Basta che il progetto A sia in grado di "vedere" il jar B e che la DLL possa essere trovata dal sistema.

    Originariamente inviato da DarthSandr
    Come devo inserire la dll nel jar?
    No, la DLL non ha senso metterla dentro il jar ... deve stare fuori, nel file-system. In una directory che sia in PATH o che comunque segua le regole del S.O. per poter essere trovata.
    Andrea, andbin.devSenior Java developerSCJP 5 (91%) • SCWCD 5 (94%)
    java.util.function Interfaces Cheat SheetJava Versions Cheat Sheet

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2025 vBulletin Solutions, Inc. All rights reserved.