|
|
|
![]() |
|
Strumenti |
![]() |
#1 |
Senior Member
Iscritto dal: Oct 2003
Messaggi: 2002
|
[C, Java, Matlab] Problema in passaggio dati tra linguaggi differenti.
Salve a tutti, vi chiedo aiuto per trovare una soluzione a questo problema.
Ho scritto una dll in C e questa è la definizione della funzione: Codice:
extern "C" DLLIMPORT struct nodo* LocateLandmarks ( const char *sImageNames[], int nImages, bool Rowley, bool iwrite, bool open_cv_coords, const char sConfFile0[], const char sConfFile1[] ); Codice:
struct nodo{ bool located; char filename[SLEN]; double Xcoords[MODELSIZE]; double Ycoords[MODELSIZE]; }; Adesso vorrei rendere la dll il più possibile portabile verso tutti gli altri linguaggi capaci di caricare la dll come Java (tramite Jni) ma anche matlab, VB, Python ecc. ecc. ma non posso prevedere a priori quali linguaggi andranno ad interfacciarsi e tantomeno se sono in grado di gestire correttamente il puntatore ad una struttura. Ho pensato anche che una soluzione possibile è fare in modo che la dll scriva i risultati direttamente in un .xml ma questo significa costringere poi il cliente della dll a scrivere una funzione apposta per leggere l'xml. Qualche consiglio su altre possibili soluzioni???
__________________
Trattative sul mercatino del forum:tante e mai un problema! Controlla pure i miei vecchi post ![]() |
![]() |
![]() |
![]() |
#2 |
Senior Member
Iscritto dal: Oct 2003
Messaggi: 2002
|
qualche aiutino
![]() Va bene qualunque tipo di idea o spunto che vi viene in mente e su cui poter ragionare.
__________________
Trattative sul mercatino del forum:tante e mai un problema! Controlla pure i miei vecchi post ![]() |
![]() |
![]() |
![]() |
#3 | |
Senior Member
Iscritto dal: Oct 2007
Città: Padova
Messaggi: 4131
|
Forse perchè la domanda che poni non è chiarissima.
Quote:
Idem se dall'altra parte c'è un tizio che programma in VB6, oppure in C# ecc... A parte questa considerazione che ho fatto, che sospetto banale, non sono in grado di aiutarti, perchè non so neanche se per rendere le cose "più accessibili a tutti" (che mi pare di capire sia la tua prima preoccupazione) è preferibile far tornare alla tua funzione un puntatore a void piuttosto che tipizzato a nodo. Spera che ti legga qualcuno esperto di interoperabilità ![]()
__________________
As long as you are basically literate in programming, you should be able to express any logical relationship you understand. If you don’t understand a logical relationship, you can use the attempt to program it as a means to learn about it. (Chris Crawford) |
|
![]() |
![]() |
![]() |
#4 | |
Senior Member
Iscritto dal: Oct 2003
Messaggi: 2002
|
Quote:
Forse con java sarebbe possibile mappando la struttura come oggetti di una classe ma non ne sono sicuro perchè non ho mai usato jni. Per motivi di progettazione restituire il puntatore all'array di strutture è la soluzione che meglio si adatta al mio problema e quindi un puntatore a void mi complica moltissimo le cose.
__________________
Trattative sul mercatino del forum:tante e mai un problema! Controlla pure i miei vecchi post ![]() |
|
![]() |
![]() |
![]() |
#5 | |
Senior Member
Iscritto dal: Oct 2007
Città: Padova
Messaggi: 4131
|
Quote:
Facciamo l'esempio di Java (premessa: mai unsato JNI in vita mia [che culo che c'hai, ti è capitato uno che parla di ciò che non conosce ![]() Tramite JNI uno magari vuole mappare la chiamata alla tua funzione. Si legge la documentazione di JNI e vede come deve fare per mappare il tutto, compreso il fatto che ha un puntatore C (e relativo tipo di dato puntato) da mapparsi. Fine della storia. E così faranno gli altri, sempre che le tecnologie che usano per interfacciarsi lo rendano possibile. In questo modo tutto il lavoro di interfacciamento è a carico di chi vuole usare la dll in questione. Un esempio(molto OLD) Sì, e magari non è nemmeno opportuno farlo: era un esempio per farti capire che le mie, da ignorante, sono solo congetture.
__________________
As long as you are basically literate in programming, you should be able to express any logical relationship you understand. If you don’t understand a logical relationship, you can use the attempt to program it as a means to learn about it. (Chris Crawford) Ultima modifica di banryu79 : 15-07-2009 alle 12:51. |
|
![]() |
![]() |
![]() |
#6 |
Senior Member
Iscritto dal: Nov 2004
Città: Tra Verona e Mantova
Messaggi: 4553
|
Lato Java non c'è nessuna differenza tra un puntatore o un array di strutture C: in ogni caso l'utente dovrà scrivere una seconda dll JNI che traduca tutto in java. Neanche i booleani sono gli stessi, figurati le strutture dati.
__________________
Uilliam Scecspir ti fa un baffo? Gioffri Cioser era uno straccione? E allora blogga anche tu, in inglese come me! |
![]() |
![]() |
![]() |
#7 | |
Senior Member
Iscritto dal: Oct 2003
Messaggi: 2002
|
Quote:
Però adesso ho un altro dubbio e cioè: nella dll faccio allocare dinamicamente la memoria necessaria all'array di strutture che poi passo tramite il puntatore. Se il programma che linka la dll è scritto in C/C++ non ci sono problemi ma se il programma è scritto in java o qualsiasi altro linguaggio? ![]() E' forse necessario aggiungere un altro entry-point nella dll che gestisca la deallocazione della memoria?
__________________
Trattative sul mercatino del forum:tante e mai un problema! Controlla pure i miei vecchi post ![]() |
|
![]() |
![]() |
![]() |
#8 |
Senior Member
Iscritto dal: Nov 2004
Città: Tra Verona e Mantova
Messaggi: 4553
|
Per altre tecnologie bisogna vedere ma in Java la tua DLL sarebbe richiamata da una seconda DLL scritta in C\C++ e solo quest'ultima si occuperebbe di dialogare con la controparte Java dunque se non ci sono problemi di gestione della memoria in un qualsiasi programma C\C++ che usi quella DLL allora non ce ne saranno quando ci si colleghera con Java.
__________________
Uilliam Scecspir ti fa un baffo? Gioffri Cioser era uno straccione? E allora blogga anche tu, in inglese come me! |
![]() |
![]() |
![]() |
Strumenti | |
|
|
Tutti gli orari sono GMT +1. Ora sono le: 02:20.