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
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
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)
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
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 ?
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)
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
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:
poi dentro il programma C scriverai come firma al metodo:codice:public native void SappGetDllVersion();
Sul sito di sun: http://java.sun.com/docs/books/tutor...1.1/index.htmlcodice:JNIEXPORT void JNICALL Java_NomeClasse_SappGetDllVersion(JNIEnv *, jclass);
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)