Domanda

Ho ereditato un progetto J ++ legacy. Ho aggiornato con successo questo progetto allo standard Sun Java.

Tuttavia, questo progetto include una DLL C ++ nativa con cui il codice Java comunica tramite il Microsoft framework RNI .

Inutile dire che chiamare System.loadLibrary (" myRniNativeDll ") ora genera un UnsatisifiedLinkError, dicendo che non è stato possibile trovare una delle dipendenze.

Sono totalmente all'oscuro di come migrare una DLL RNI C ++ in una DLL JNI; Non ho idea da dove cominciare. Ho il codice sorgente C ++, ma non so come creare una DLL JNI. Ci sono suggerimenti / tutorial / materiali online a cui gli esperti Java possono indicarmi?

È stato utile?

Soluzione

Se la licenza è accettabile (LGPL), Java Native Access fornisce un FFI piuttosto più amichevole di lo fa JNI; il porting può ridursi eliminando il livello RNI ed esponendo semplicemente una semplice API 'C'-callable.

Altri suggerimenti

Dai un'occhiata a JNA - potrebbe essere possibile accedere direttamente alla DLL RNI in questo modo ; o almeno renderà il lavoro di porting molto più semplice che eseguire manualmente JNI.

Se possibile, ti suggerisco di considerare di evitare l'RNI - > Problema di porting JNI riscrivendo il codice C ++ in Java puro.

La scrittura del codice JNI richiede un'enorme cura e mette a rischio la stabilità di JVM se si sbaglia. Il mio consiglio è di evitarlo se possibile.

Anche se non ho mai usato l'RNI di Microsoft, ma solo il JNI di Sun, mi aspetto che non si possa usare direttamente una DLL in stile RNI come se fosse una DLL in stile JNI. Inoltre, non sono a conoscenza di nulla che possa convertire o collegare automaticamente RNI in JNI.

Non menzionate se avete l'origine della DLL RNI C ++, anche se suppongo che lo facciate poiché menzionate l'eredità del progetto. Se si ha esperienza C ++ / C e si ha una buona idea delle funzionalità fornite dalla DLL RNI, non dovrebbe essere troppo difficile spostarlo in JNI. Il tempo impiegato per il porting verrebbe probabilmente ripagato per il suo mantenimento in avanti.

Il link fornito alla voce JNI su Wikipedia ha molti link utili sulla codifica con JNI. Senza un po 'più di dettagli, è difficile dare altri consigli.

Java Native Interface: Programmer's Guide and Specification è la migliore risorsa che io trovato per la scrittura del codice JNI. Non copre RNI - > JNI, ma è un ottimo * punto di partenza per apprendere come funziona JNI.

* In realtà è molto secco e non particolarmente divertente da leggere, ma è il migliore che sono stato in grado di trovare.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top