Discussione:
Creare una DLL in Java
(troppo vecchio per rispondere)
Xndr!
2010-08-05 08:15:11 UTC
Permalink
C'è qualcuno in grado di spiegarmi a grandi linee i passi per creare una DLL
in java?
O magari indirizzarmi a qualche articolo ben fatto.
Penso di aver capito che è necessario realizzare del codice c o c++ che da
un lato espone gli __stdcall come metodi della dll e dall'altro accede al
codice java tramite jnio tirando sù una vm.
.....
mi servirebbe qualche dettaglino in piu!

Grazie
AP
RedBerry
2010-08-06 07:00:46 UTC
Permalink
Post by Xndr!
C'è qualcuno in grado di spiegarmi a grandi linee i passi per creare una DLL
in java?
O magari indirizzarmi a qualche articolo ben fatto.
Penso di aver capito che è necessario realizzare del codice c o c++ che da
un lato espone gli __stdcall come metodi della dll e dall'altro accede al
codice java tramite jnio tirando sù una vm.
.....
mi servirebbe qualche dettaglino in piu!
Grazie
AP
Non vorrei sbagliarmi ma che io sappia in Java non è possibile creare
DDL. Da quanto ne so le ddl sono una prerogativa del linguaggio C/C++.
Alessandro Carraro (JUG Padova)
2010-08-06 07:42:09 UTC
Permalink
Post by RedBerry
Post by Xndr!
C'è qualcuno in grado di spiegarmi a grandi linee i passi per creare una DLL
in java?
O magari indirizzarmi a qualche articolo ben fatto.
Penso di aver capito che è necessario realizzare del codice c o c++ che da
un lato espone gli __stdcall come metodi della dll e dall'altro accede al
codice java tramite jnio tirando sù una vm.
.....
mi servirebbe qualche dettaglino in piu!
Grazie
AP
Non vorrei sbagliarmi ma che io sappia in Java non è possibile creare
DDL. Da quanto ne so le ddl sono una prerogativa del linguaggio C/C++.
"Java" è in realtà ambiguo. Spesso e volentieri per "java" si intende
l' _ambiente di esecuzione java_, ovvero il runtime.

Il runtime paradossalmente non è però in grado di eseguire programmi
java (intendo il file di testo .java), infatti questo deve essere
compilato in bytecode. A questo punto il runtime può eseguire tale
bytecode. Da notare, un runtime java può eseguire anche programmi
scritti anche in altri linguaggi: l'unica condizione è che tale
linguaggio abbia un compilatore che produca bytecode.

Tornando in topic (scusa la digressione), per quello che devi fare tu
(l'esatto opposto) si può affermare che sussiste lo stesso principio.
Una DLL la puoi creare con il linguaggio che più ti aggrada (molte
sono in VB), l'unica condizione è che esista un compilatore (e un tool
di build, immagino) che faccia la compilazione/packaging in DLL. A
quel punto, ovviamente, puoi scordarti però tutte le caratteristiche
di Java: non più cross-platform, perdi la possibilità di interagire
con altre libreria java (a meno che non le includa nella stessa DLL).

Ho sentito parlare abbastanza bene di un Tool chiamato JET
http://www.excelsior-usa.com/
è sicuramente in grado di compilare in DLL, come si può leggere nelle
FAQ
http://www.excelsior-usa.com/jettechfaq.html#interop1
ma non ho esperienza diretta.

spero di essere stato utile
ciao
michelangelo giacomelli
2010-08-06 09:03:16 UTC
Permalink
Te la sparo secondo me è quasi più semplice usare alla il gcj e fare una
cosa del tipo: (linux ma dovrebbe valere anche su windows con le dovute
modifiche)
gcj -c mialib.jar
tira fuori mialib.o
ar -r libmialib.a mialib.o
verò che questo vale per le librerie statiche e che si perde gran parte
delle funzionalità del jdk della sun però è infinitamente più semplice..
dipende cosa l'op deve fare..
Alessandro Carraro (JUG Padova)
2010-08-09 08:09:16 UTC
Permalink
Post by michelangelo giacomelli
Te la sparo secondo me è quasi più semplice usare alla il gcj e fare una
cosa del tipo: (linux ma dovrebbe valere anche su windows con le dovute
modifiche)
gcj -c mialib.jar
tira fuori mialib.o
ar -r libmialib.a mialib.o
verò che questo vale per le librerie statiche e che si perde gran parte
delle funzionalità del jdk della sun però è infinitamente più semplice..
dipende cosa l'op deve fare..
Verissimo. Guardando anche come si è evoluto il thread, direi che
l'approccio gcj e quello da me menzionato sono i più validi. Purtroppo
nessuno dei due è ottimale: gcj non so se va su Win, ma se va mi sa
che l'hobbista forse non ha il background sufficiente. JET d'altra
parte non è free (nel senso di beer) e anche questo per l'hobbista può
essere un ostacolo (ma ci sono licenze free per uso non commerciale
(anche se closed source))
Marco
2010-08-06 09:33:39 UTC
Permalink
Post by Xndr!
C'è qualcuno in grado di spiegarmi a grandi linee i passi per creare una DLL
in java?
O magari indirizzarmi a qualche articolo ben fatto.
Penso di aver capito che è necessario realizzare del codice c o c++ che da
un lato espone gli __stdcall come metodi della dll e dall'altro accede al
codice java tramite jni o tirando sù una vm.
.....
mi servirebbe qualche dettaglino in piu!
Grazie
AP
Se ho capito cosa cerchi, non vuoi creare una dll in java; al contrario,
vuoi usare metodi nativi scritti in altri linguaggi (per esempio, c o
c++), implementati in una dll. In altre parole, cercavi un esempio su
jni. Giusto?

http://www.bradipomissile.net/2007/12/01/jni-un-esempio-pratico/
Xndr!
2010-08-06 10:10:49 UTC
Permalink
Post by Marco
jni. Giusto?
...Forse.

Prima cosa grazie per il link, molto carino.

Faccio un esempio di cosa mi serve:
devo aggiungere delle funzionalità ad un programma win32, e lui accetta di
essere "espanso" solo con delle dll "classiche", nel senso che quelle
sviluppate in .Net non vanno bene.

Le funzionalità che io voglio aggiungere fanno parte di una vecchia libreria
java che non ho voglia di riscrivere in c++. Anche perchè sono un hobbysta e
non ho molte risorse intellettivo/temporali disponibili.

Sfogliando quà e là per la rete mi sembra di aver capito che è possibile
fare una specie di wrapper/interfaccia in c++ e tramite jini utilizzare la
mia libreria java esponendo le mie funzioni, ma anche le classi, al
programma win32.

Il problema è che in quanto hobbysta non sono molto brillante su argomenti
così specifici e quindi mi avrebbe fatto comodo un tutorial passo/passo o
qualche dritta mirata.

Grazie a tutti per le risposte.

----- Original Message -----
From: "Marco" <***@excite.it>
Newsgroups: it.comp.java
Sent: Friday, August 06, 2010 11:33 AM
Subject: Re: Creare una DLL in Java
Post by Marco
Post by Xndr!
C'è qualcuno in grado di spiegarmi a grandi linee i passi per creare una DLL
in java?
O magari indirizzarmi a qualche articolo ben fatto.
Penso di aver capito che è necessario realizzare del codice c o c++ che da
un lato espone gli __stdcall come metodi della dll e dall'altro accede al
codice java tramite jni o tirando sù una vm.
.....
mi servirebbe qualche dettaglino in piu!
Grazie
AP
Se ho capito cosa cerchi, non vuoi creare una dll in java; al contrario,
vuoi usare metodi nativi scritti in altri linguaggi (per esempio, c o
c++), implementati in una dll. In altre parole, cercavi un esempio su jni.
Giusto?
http://www.bradipomissile.net/2007/12/01/jni-un-esempio-pratico/
TheStylist
2010-08-06 11:48:28 UTC
Permalink
Il 06/08/2010 12.10, Xndr! ha scritto:
[CUT]
Post by Xndr!
Il problema è che in quanto hobbysta non sono molto brillante su argomenti
così specifici e quindi mi avrebbe fatto comodo un tutorial passo/passo o
qualche dritta mirata.
mi sembra strano che un "hobbysta" abbia a che fare con
questi argomenti...
Enrico 'Henryx' Bianchi
2010-08-06 19:22:45 UTC
Permalink
mi sembra strano che un "hobbysta" abbia a che fare con questi
argomenti...
A me no, in quanto sviluppare (ad esempio) un plugin per firefox puo`
essere sia un lavoro remunerativo (e.g il client per una vpn), sia un
lavoro hobbystico (e.g. una estensione). Tutto sta nelle proprie
intenzioni e nelle proprie pretese

Enrico
TheStylist
2010-08-08 09:20:57 UTC
Permalink
Post by Enrico 'Henryx' Bianchi
mi sembra strano che un "hobbysta" abbia a che fare con questi
argomenti...
A me no, in quanto sviluppare (ad esempio) un plugin per firefox puo`
essere sia un lavoro remunerativo (e.g il client per una vpn), sia un
lavoro hobbystico (e.g. una estensione). Tutto sta nelle proprie
intenzioni e nelle proprie pretese
Più che altro mi riferivo al fatto che per un hobbysta non è da
tutti i giorni sbattere la testa sulle DLL.
Xndr!
2010-08-07 08:10:15 UTC
Permalink
Non pensare, siamo in molti a programmare per hobby.
Ovviamente i risultati sono allineati con le risorse e le capacità
impiegate.
Ma lo scopo è divertirsi.

Ciao
Xndr!
Post by TheStylist
[CUT]
Post by Xndr!
Il problema è che in quanto hobbysta non sono molto brillante su argomenti
così specifici e quindi mi avrebbe fatto comodo un tutorial passo/passo o
qualche dritta mirata.
mi sembra strano che un "hobbysta" abbia a che fare con
questi argomenti...
TheStylist
2010-08-08 09:21:10 UTC
Permalink
Post by Xndr!
Non pensare, siamo in molti a programmare per hobby.
Ovviamente i risultati sono allineati con le risorse e le capacità
impiegate.
Ma lo scopo è divertirsi.
Ciao
Xndr!
Più che altro mi riferivo al fatto che per un hobbysta non è da
tutti i giorni sbattere la testa sulle DLL.
Xndr!
2010-08-08 18:00:06 UTC
Permalink
Post by TheStylist
Post by Xndr!
Non pensare, siamo in molti a programmare per hobby.
Ovviamente i risultati sono allineati con le risorse e le capacità
impiegate.
Ma lo scopo è divertirsi.
Ciao
Xndr!
Più che altro mi riferivo al fatto che per un hobbysta non è da
tutti i giorni sbattere la testa sulle DLL.
Verissimo,
mi ci hanno tirato per i capelli.

Ciao
Xndr!
Enrico 'Henryx' Bianchi
2010-08-06 19:18:49 UTC
Permalink
Post by Xndr!
devo aggiungere delle funzionalità ad un programma win32, e lui accetta
di essere "espanso" solo con delle dll "classiche", nel senso che quelle
sviluppate in .Net non vanno bene.
Allora, se non ho capito male quello che devi fare e` un plugin per un
applicativo win32 che ricalca le funzionalita` sviluppate in una libreria
java. Personalmente ritengo che tu stia sbagliando approccio, in quanto
Java non e` pensato per essere cosi` legato ad una piattaforma. Se non
vuoi sviluppare in C++ (sacrosanto) e non ti e` possibile sviluppare in
C# (anche se mi sembra strano), puoi rifare quel plugin in Visual Basic
(classico) o in Delphi

Enrico
Xndr!
2010-08-07 08:12:33 UTC
Permalink
Enrico,
grazie dei consigli, ma il mio scopo è quello di utilizzare quella libreria
scritta in java.

Ciao
Xndr!
Post by Enrico 'Henryx' Bianchi
Post by Xndr!
devo aggiungere delle funzionalità ad un programma win32, e lui accetta
di essere "espanso" solo con delle dll "classiche", nel senso che quelle
sviluppate in .Net non vanno bene.
Allora, se non ho capito male quello che devi fare e` un plugin per un
applicativo win32 che ricalca le funzionalita` sviluppate in una libreria
java. Personalmente ritengo che tu stia sbagliando approccio, in quanto
Java non e` pensato per essere cosi` legato ad una piattaforma. Se non
vuoi sviluppare in C++ (sacrosanto) e non ti e` possibile sviluppare in
C# (anche se mi sembra strano), puoi rifare quel plugin in Visual Basic
(classico) o in Delphi
Enrico
Patrick
2010-08-17 17:59:12 UTC
Permalink
Post by Xndr!
Enrico,
grazie dei consigli, ma il mio scopo è quello di utilizzare quella libreria
scritta in java.
Ciao Xndr, pe rmia curiosita possiedi i sorgenti di quella libreria, se
si ti suggererirei di utilizzare l' approccio con gcj, oppure dovresti
prenderti la briga di studiare il c o il c++ per crearti un wrapper che
istanzi una jvm e crei gli oggetti java della libreria in tuo possesso.

Forse questo link può esserti di aiuto:

- http://java4cpp.kapott.org/

in bocca al lupo.
Dr.Ugo Gagliardelli
2010-08-30 11:37:07 UTC
Permalink
Post by Marco
Post by Xndr!
C'è qualcuno in grado di spiegarmi a grandi linee i passi per creare una DLL
in java?
O magari indirizzarmi a qualche articolo ben fatto.
Penso di aver capito che è necessario realizzare del codice c o c++ che da
un lato espone gli __stdcall come metodi della dll e dall'altro accede al
codice java tramite jni o tirando sù una vm.
.....
mi servirebbe qualche dettaglino in piu!
Grazie
AP
Se ho capito cosa cerchi, non vuoi creare una dll in java; al contrario,
vuoi usare metodi nativi scritti in altri linguaggi (per esempio, c o
c++), implementati in una dll. In altre parole, cercavi un esempio su
jni. Giusto?
http://www.bradipomissile.net/2007/12/01/jni-un-esempio-pratico/
In realta' il jni si puo' usare in entrambi i sensi, ovvero creare una
classe che utilizzi funzioni native di libreria (statica o dinamica),
oppure creare un oggetto che utilizza le funzioni jni per istanziare
classi Java, tale oggetto potra' essere linkato in una libreria (statica
o dinamica).

Loading...