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

    [java] usare dll c++ in java

    salve.
    ho una dll c++ (fatta con MS .net) formata da 3 file:
    1. la dll vera e propria mia.dll
    2. il file mia.lib
    3. il file mia.h

    non avendo la possibilità di ricompilare la dll per usare JNI, ho provato le varie soluzioni JNA, JACOB, BRIDJ ma nessuna alla fine funziona...

    chi di voi ha affrontato in passato (con successo) il mio stesso problema?
    cosa avete usato?

  2. #2
    Moderatore di Programmazione L'avatar di LeleFT
    Registrato dal
    Jun 2003
    Messaggi
    17,318
    Del .lib e .h non ne hai bisogno (non per Java, almeno).

    Se vuoi usare JNI devi essere tu a scrivere una ulteriore DLL, secondo uno specifico standard definito da JNI, che faccia da ponte fra l'applicazione Java e la tua DLL. Ma se non hai la possibilità di compilare il codice nativo non è una soluzione applicabile.

    Con JNA, al contrario, dovresti riuscire ad usare direttamente la DLL senza dover scrivere nemmeno una riga di codice nativo. Non l'ho mai usato, ma ne ho visto diversi esempi e mi sembra abbastanza semplice (conoscendo i prototipi delle funzioni esportate dalla DLL).


    Quando dici "nessuna di quelle funziona", non stai aiutanto a capire il problema. Premesso che JNI non lo puoi usare, cosa non va usando JNA? Ma soprattutto, che cosa hai scritto tu?


    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

  3. #3
    Ok. Ecco dove sono arrivato:

    1. SWIG

    2. con Eclipse uso il plugin sKWash (http://users.telenet.be/johan.witter...com/index.html) come da esempio http://users.telenet.be/johan.witter.../get/get2.html

    3. Creo mio Main.java e dichiaro:
    static {
    try {
    System.loadLibrary("mialib");
    } catch (UnsatisfiedLinkError e) {
    System.err.println("Native code library failed to load. See the chapter on Dynamic Linking Problems in the SWIG Java documentation for help.\n" + e);
    System.exit(1);
    }
    }
    che eseguita non dà errore.

    4. main vero e proprio:

    public static void main(String[] args) {
    MiaLibC lc = new MiaLibC();
    }

    ma sul costruttore ottengo:

    Exception in thread "main" java.lang.UnsatisfiedLinkError: prova.swigJNI.new_MiaLibC()J
    at prova.swigJNI.new_MiaLibC(Native Method)
    at prova.MiaLibC.<init>(MiaLibC.java:39)
    at prova.Main.main(Main.java:30)



  4. #4
    che il problema sia più in generale con JNI ?

  5. #5
    Moderatore di Programmazione L'avatar di LeleFT
    Registrato dal
    Jun 2003
    Messaggi
    17,318
    SWIG l'ho sentito nominare la prima volta solo dopo aver letto il tuo post.

    Sinceramente con JNI non ho mai avuto problemi ma, come già detto, JNI richiede di scrivere una DLL che faccia da ponte fra Java e la risorsa nativa. Quindi, richiede un compilatore per il codice con cui si scrive la DLL.

    JNA, pur non avendolo mai provato, non mi sembra sia così complicato. Si tratta semplicemente di scrivere una interfaccia Java che rappresenti le funzioni messe a disposizione dalla DLL. Ora, non avendolo mai provato, non so se sia effettivamente così ampio da coprire tutti i casi, ma se non ci sono problemi con i tipi di dato, proverei prima quest'ultimo approccio, senza andare a cercare soluzioni più complesse come questo SWIG, che, da quello che ho visto, richiede comunque un compilatore per la scrittura di una (o due, addirittura?) DLL intermedia.


    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

  6. #6
    capisco.
    tornando a jna ti posso dire che provandolo con le dll native (tipo far eseguire una printf) non ci sono problemi e funziona. La sintassi x scrivere l'interfaccia alla dll è un po' articolata e mi sn affidato a JNAerator che però produce le classi .java senza i metodi pubblici.
    Mentre le struct le esporta senza problemi...

    Qualcuno ha usato questo tool con proprie dll?

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.