Newsgroup: it.comp.java
Titolo: Creare una DLL in Java

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

 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

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..


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/

> 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.


 qualche dritta mirata.
mi sembra strano che un "hobbysta" abbia a che fare con
questi argomenti...

 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

 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

 ha scritto nel messaggio 
news:4c5bf597$0$18995$4faf...@reader5.news.tin.it...


 ha scritto nel 
messaggio news:i3hn6p$1p3$1...@alice.wonderland.home...



Più che altro mi riferivo al fatto che per un hobbysta non è da
tutti i giorni sbattere la testa sulle DLL.

 Xndr!
Più che altro mi riferivo al fatto che per un hobbysta non è da


 ha scritto nel messaggio 
news:4c5e760f$0$12126$4faf...@reader4.news.tin.it...

Verissimo,
mi ci hanno tirato per i capelli.
Ciao
Xndr! 


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))


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.

il 06.08.2010 11.33, Scrive Marco 43539768:

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).