Visualizzazione dei risultati da 1 a 6 su 6
  1. #1

    [JNI] utilizzare dll scritta da terzi

    Ciao a tutti,

    Sto cercando di capire come funziona la Java Native Interface. Tutti i tutorial o manuali spiegano, nel loro HelloWorld, come generare una dll con funzioni da richiamare da un programma java. un passo del procedimento e' la generazione di un header file ad hoc per Jni utilizzando il programma javah.

    Il passo immediatamente successivo e' l'implementazione dei metodi dichiarati nell'header file.

    Quello che non mi e' chiaro e' cosa fare se la dll mi viene fornita da terzi. Una libreria diciamo scritta per programmi in linguaggio C/C++. In quel caso alla creazione dell'header non puo' seguire l'implementazione delle funzioni dichiarate perche' tale implementazione gia' e' stata scritta. E a quanto ho capito, senza header generato con javah il meccanismo JNI non funziona.

    Una soluzione che mi viene in mente e' creare una classe C++ wrapper che richiama i metodi della dll e implementa il famoso header file.
    Voi che ne pensate ?

  2. #2
    Utente di HTML.it
    Registrato dal
    Aug 2002
    Messaggi
    8,013
    spippolando un po' sui motori di ricerca ho trovato questo:

    http://johannburkard.de/blog/program...thout-JNI.html

    forse ti può aiutare, forse no. Probabilmente il metodo che vuoi intraprendere tu comunque è il più flessibile (o forse anche l'unico, visto le limitazioni di quel progetto linkato)
    <´¯)(¯`¤._)(¯`»ANDREA«´¯)(_.¤´¯)(¯`>
    "The answer to your question is: welcome to tomorrow"

  3. #3
    Moderatore di Programmazione L'avatar di LeleFT
    Registrato dal
    Jun 2003
    Messaggi
    17,320

    Re: [JNI] utilizzare dll scritta da terzi

    Originariamente inviato da Mr.Bloom
    Una soluzione che mi viene in mente e' creare una classe C++ wrapper che richiama i metodi della dll e implementa il famoso header file.
    Voi che ne pensate ?
    E' esattamente ciò che dovrai fare usando JNI: una DLL che fa da ponte fra la tua applicazione Java e la DLL scritta da terzi.

    Esiste anche una tecnologia diversa e forse più immediata: JNA. Non l'ho ancora provata, ma non mancherò di farlo appena avrò tempo.


    Ciao.
    "Perchè spendere anche solo 5 dollari per un S.O., quando posso averne uno gratis e spendere quei 5 dollari per 5 bottiglie di birra?" [Jon "maddog" Hall]
    Fatti non foste a viver come bruti, ma per seguir virtute e canoscenza

  4. #4

    Re: Re: [JNI] utilizzare dll scritta da terzi

    Originariamente inviato da LeleFT
    Esiste anche una tecnologia diversa e forse più immediata: JNA. Non l'ho ancora provata, ma non mancherò di farlo appena avrò tempo.
    Ciao.
    Molto molto interessante...anche io conoscevo solo la soluzione "classica" con jni.

    Anche io con un po di tempo farò delle prove ed eventualmente comunicherò i risultati con una pillola se necessario
    Il centro dell'attenzione non è sempre un buon posto in cui trovarsi

    Mai discutere con uno stupido, la gente potrebbe non capire la differenza. (O. W.)

  5. #5
    Salve,

    mi sono appena iscritto al forum avendo lo stesso problema. Praticamente mi serve richiamare una libreria .so (sto sotto linux) usando la jni. Ho studiato un po' di teoria, e la cosa sembra davvero potente. La mia idea (almeno l'idea che mi è stata imposta essendo universitario) è la seguente:

    ho un programma scritto in java che tramite la Runtime.exec() inizialmente richiamava un tool esterno (scritto in c++). Il problema è che siccome deve fare migliaia di chiamate a questo processo, ogni volta la runtime.exec va a creare un nuovo processo, a scapito dei tempi di esecuzione. Così per rendere la cosa molto più performante, con JNI si può invocare semplicemente un metodo nativo che lika la libreria, il che sarebbe molto più veloce non dovendo creare ogni volta un processo. Ora il problema non è scrivere una .so (ho fatto molti esempi utilizzando jni), ma come faccio a rendere quella del mio programma scritto in c++ già esistente una libreria? Cioè, avendo già tutto quello che mi serve, come si fa?

    Ho letto di scrivere una libreria che faccia da "tramite", ma non ho idea di come realizzarla.

    Grazie mille in anticipo

    Saluti a tutti

  6. #6
    Moderatore di Programmazione L'avatar di alka
    Registrato dal
    Oct 2001
    residenza
    Reggio Emilia
    Messaggi
    24,472

    Moderazione

    Originariamente inviato da Donasnake
    mi sono appena iscritto al forum avendo lo stesso problema.
    In tal caso, non si risolleva una discussione vecchia: leggi il Regolamento.

    Bensì, si provvede ad aprire una discussione specifica per il tuo problema, come poi hai fatto.
    MARCO BREVEGLIERI
    Software and Web Developer, Teacher and Consultant

    Home | Blog | Delphi Podcast | Twitch | Altro...

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.