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

    [JAVA] Utilizzare dll

    Qualcuno sa se è possibile utilizzare delle dll scritte in C in linguaggio java??
    so che la cosa è possibile pero non so assolutamente come si debba procedere... ci vogliono i sorgenti ??

    C'entra qualcosa il java native interefaces???
    grazie

  2. #2
    Utente di HTML.it L'avatar di netarrow
    Registrato dal
    Apr 2004
    Messaggi
    1,425
    Qui c'è un piccolo esempio: http://www.pierotofy.it/pages/guide/...ouse_con_Java/

    Gestire il mouse in windows con i metodi nativi.
    Il JNI praticamente si basa sul fatto che Java usa la stessa interfaccia(di programmazione, non grafica) per chiamare funzioni native diverse; quindi resta uguale il comando Java, cambia la libreria che la JVM chiama(o meglio, chiama un porting adatto a quel sistema).

    Imparare è un'esperienza, tutto il resto è solo informazione. (Albert Einstein)

  3. #3
    scusami un attimo...
    ho dato un occhiata veloce ma a dire il vero non è che c abbia capito molto!!
    pero se mi dici che si puo fare mi ci metto...
    in pratica ho delle DLL (i sorgenti al momento non li ho e non so se posso averli),la documentazione delle dll...
    ora vorrei sapere se è possibile sfruttare tutte quelle funzioni ( presenti nelle dll ) in java !
    Mi è gia capitato una volta di fare una cosa del genere..o meglio, mi avevano mandato la dll e il jar..
    quello che devo fare io è creare il jar per caso ???
    se si come?
    GRAZIE

  4. #4
    dunque...il produttore mi ha inviato le dll e io gli ho posto il quesito.. come interfacciarle a java ??
    "le DLL le può usae con qualunque linguaggio riscrivendo quelli che in C sono i prototipi di funzione nello stile del suo linguaggio, e mantenendo le convenzioni di chiamata delle funzioni C"

    Lui mi ha inviato 2 file .dll e 2 file .h !!
    sapete aiutarmi ?

  5. #5
    Utente di HTML.it L'avatar di netarrow
    Registrato dal
    Apr 2004
    Messaggi
    1,425
    devi insegnare Java al C, nel link sopra c'è solo un esempio pratico, se cerchi nel sito di Sun dovresti trovare un tutorial completo.

    Di certo però una DLL non vale l'altra, una DLL per Java deve avere il srogente(in questo caso in C) fatto ad hoc usando jni.h e tutti i tipi di dato java-style inclusi.
    Praticamente invece che creare un int, un Object, ecc... dnetro jni ci sono i porting dei tipi di dato Java a C++, quindi jint, jobject ecc...

    Imparare è un'esperienza, tutto il resto è solo informazione. (Albert Einstein)

  6. #6
    dunque..io ho 2 o 3 file cn estensione "dll". Poi ne ho 2 con estensione .h!! in uno, ad esmepio cè dentro :

    #define ERROR_FLAG 0x80000000
    #define FLUSH_ERROR 0x04000000
    #define ASYNC_TIMEOUT 0x00200000
    #define TIMEOUT 0x00100000
    typedef struct _ALARMDATA
    {
    BYTE bHour;
    BYTE bMinute;
    BYTE bSecond;
    BYTE bDay;
    BYTE bMonth;
    BYTE bYear;
    BYTE bAlarmCode;
    BYTE bModule;
    BYTE bAlarmStringPtr;
    BYTE bFlags;
    }ALARMDATA, *LPALARMDATA;

    quindi dichiarazione di variabili!!!
    nell'altro ho dentro cose del genere:

    #ifdef __cplusplus
    extern "C" {
    #endif

    DWORD APIENTRY SappGetDllVersion();
    DWORD APIENTRY SappStartUserProgram(HANDLE hPort, DWORD dwCommType = CMT_SERIALPORT);
    DWORD APIENTRY SappHaltUserProgram(HANDLE hPort, DWORD dwCommType = CMT_SERIALPORT);
    DWORD APIENTRY SappGetAlarmBuffer(HANDLE hPort, BYTE bPos, LPALARMDATA lpAD, DWORD dwCommType = CMT_SERIALPORT);
    DWORD APIENTRY SappGetInputList(HANDLE hPort, BYTE bNumPacket, LPBYTE lpPacketData, DWORD dwCommType = CMT_SERIALPORT);
    DWORD APIENTRY SappGetOutputList(HANDLE hPort, BYTE bNumPacket, LPBYTE lpPacketData, DWORD dwCommType = CMT_SERIALPORT);
    DWORD APIENTRY SappGetAlarmList(HANDLE hPort, BYTE bNumPacket, LPBYTE lpPacketData, DWORD dwCommType = CMT_SERIALPORT);
    che sarebbero le funzioni...ora pero non capisco come posso usare questi file con java!!!
    ho trovato un esempio su mokabyte:
    http://www.mokabyte.it/2000/01/jni1.htm
    qui in pratica scrive codice in java, poi cn l'apposito strumento crea il codice nativo e poi mi sembra d capire che usa questo codice per C!!!
    io invece ho il codice nativo e dovrei usarlo per java , quindi credo il contrario

  7. #7
    Utente di HTML.it L'avatar di netarrow
    Registrato dal
    Apr 2004
    Messaggi
    1,425
    Per interfacciarsi con una DLL nel sorgente devi aver usato il java native interfaces, ovvero un'interfaccia di programmazione adatta a Java, che sta dentro il jni.h(fornito con il JDK).

    In Java crei il metodo nativo, ad esempio:

    codice:
    public native void SappGetDllVersion();
    poi dentro il programma C scriverai come firma al metodo:

    codice:
    JNIEXPORT void JNICALL Java_NomeClasse_SappGetDllVersion(JNIEnv *, jclass);
    Sul sito di sun: http://java.sun.com/docs/books/tutor...1.1/index.html

    Hai un tutorial forse più completo e ti indicano anche un libro per approfondire.


    Sennò potresti fare un dll ex novo che chiama le funzioni delle altre due DLL, quindi che include i due .h, che linka le altre due librerie e chiama quelle; così non devi fare modifiche ai sorgenti di quelle che già hai.

    Imparare è un'esperienza, tutto il resto è solo informazione. (Albert Einstein)

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 © 2024 vBulletin Solutions, Inc. All rights reserved.