Torna indietro   Hardware Upgrade Forum > Software > Programmazione

Marvel's Wolverine, la recensione: Logan torna protagonista in un'avventura brutale e intensa
Marvel's Wolverine, la recensione: Logan torna protagonista in un'avventura brutale e intensa
Marvel's Wolverine porta Logan in un'avventura inedita, violenta e fortemente narrativa, costruita attorno alla sua natura di combattente e al difficile rapporto con il proprio passato. Insomniac Games punta su combattimenti spettacolari, progressione e personalizzazione, inserendo l'azione in un mondo segnato dalla persecuzione dei mutanti. Un viaggio intenso, che alterna mattanza, esplorazione e momenti sorprendentemente emotivi.
DJI Romo 2: tante novità lo rendono un robot completo
DJI Romo 2: tante novità lo rendono un robot completo
Romo 2 è la seconda generazione di robot lavapavimenti di DJI, un modello che si caratterizza per la precisione nel sistema di navigazione e per il funzionamento particolarmente silenzioso. Con le modifiche introdotte in questa seconda versione, e un posizionamento di prezzo più allineato alla concorrenza, rappresenta una valida alternativa sul mercato delle soluzioni di pulizia domestica
Sony Bravia 9 II: il True RGB alla prova, dove l'LCD sfida l'OLED
Sony Bravia 9 II: il True RGB alla prova, dove l'LCD sfida l'OLED
Il primo Sony con retroilluminazione True RGB alla prova del banco di misura e dei contenuti: luminanza enorme, colori accurati in HDR e un antiriflesso molto efficace. I limiti sono due sole HDMI 2.1 e il blooming fuori asse
Tutti gli articoli Tutte le news

Vai al Forum
Rispondi
 
Strumenti
Old 14-07-2009, 20:04   #1
Ntropy
Senior Member
 
L'Avatar di Ntropy
 
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[]
    );
la funzione LocateLandmarks legge quindi i filename, compie dei calcoli ed i risultati di ogni filename elaborato vengono inseriti all'interno di una struttura per formare quindi un array di strutture, e questo è la struttura:

Codice:
struct nodo{
       bool located;
       char filename[SLEN];
       double Xcoords[MODELSIZE];
       double Ycoords[MODELSIZE];        
};
infine, la dll restituisce il puntatore all'array di strutture e fino a qui tutto bene.
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
Ntropy è offline   Rispondi citando il messaggio o parte di esso
Old 15-07-2009, 10:38   #2
Ntropy
Senior Member
 
L'Avatar di Ntropy
 
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
Ntropy è offline   Rispondi citando il messaggio o parte di esso
Old 15-07-2009, 11:42   #3
banryu79
Senior Member
 
L'Avatar di banryu79
 
Iscritto dal: Oct 2007
Città: Padova
Messaggi: 4131
Forse perchè la domanda che poni non è chiarissima.
Quote:
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.
Se nel codice che compilato assieme forma la dll non sono presenti altri tipi di dato user defined (esclusa appunto la tua struttura nodo) allora chi si interfaccerà, chessò, lato Java tramite JNI si preoccuperà lui di (è sua responsabilità) di mappare le funzioni e i tipi di dato che tu fornisci con la tecnologia che JNI (in questo caso) gli mette a disposizione.

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)
banryu79 è offline   Rispondi citando il messaggio o parte di esso
Old 15-07-2009, 12:03   #4
Ntropy
Senior Member
 
L'Avatar di Ntropy
 
Iscritto dal: Oct 2003
Messaggi: 2002
Quote:
Originariamente inviato da banryu79 Guarda i messaggi
Forse perchè la domanda che poni non è chiarissima.

Se nel codice che compilato assieme forma la dll non sono presenti altri tipi di dato user defined (esclusa appunto la tua struttura nodo) allora chi si interfaccerà, chessò, lato Java tramite JNI si preoccuperà lui di (è sua responsabilità) di mappare le funzioni e i tipi di dato che tu fornisci con la tecnologia che JNI (in questo caso) gli mette a disposizione.

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à
Si credo di aver capito, quindi tu dici che è compito di chi usa la dll farsi carico di gestire lo scambio dei dati. In realtà mi preoccupo (ma forse senza motivo) se altri linguaggi oltre a C/C++ sono in grado di gestire correttamente un puntatore ad un'array di strutture.
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
Ntropy è offline   Rispondi citando il messaggio o parte di esso
Old 15-07-2009, 12:42   #5
banryu79
Senior Member
 
L'Avatar di banryu79
 
Iscritto dal: Oct 2007
Città: Padova
Messaggi: 4131
Quote:
Originariamente inviato da Ntropy Guarda i messaggi
In realtà mi preoccupo (ma forse senza motivo) se altri linguaggi oltre a C/C++ sono in grado di gestire correttamente un puntatore ad un'array di strutture.
Ecco, qui forse c'è da chiarire, credo.
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)

Quote:
Originariamente inviato da Ntropy Guarda i messaggi
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.
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.
banryu79 è offline   Rispondi citando il messaggio o parte di esso
Old 15-07-2009, 13:23   #6
PGI-Bis
Senior Member
 
L'Avatar di PGI-Bis
 
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!
PGI-Bis è offline   Rispondi citando il messaggio o parte di esso
Old 16-07-2009, 18:56   #7
Ntropy
Senior Member
 
L'Avatar di Ntropy
 
Iscritto dal: Oct 2003
Messaggi: 2002
Quote:
Originariamente inviato da PGI-Bis Guarda i messaggi
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.
Capito quindi è inutile che mi faccia tanti problemi.

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
Ntropy è offline   Rispondi citando il messaggio o parte di esso
Old 16-07-2009, 19:43   #8
PGI-Bis
Senior Member
 
L'Avatar di PGI-Bis
 
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!
PGI-Bis è offline   Rispondi citando il messaggio o parte di esso
 Rispondi


Marvel's Wolverine, la recensione: Logan torna protagonista in un'avventura brutale e intensa Marvel's Wolverine, la recensione: Logan torna p...
DJI Romo 2: tante novità lo rendono un robot completo DJI Romo 2: tante novità lo rendono un ro...
Sony Bravia 9 II: il True RGB alla prova, dove l'LCD sfida l'OLED Sony Bravia 9 II: il True RGB alla prova, dove l...
Geely EX5, un mese al volante: il SUV elettrico cinese che ci ha sorpreso (quasi) senza riserve Geely EX5, un mese al volante: il SUV elettrico ...
Mova Z70 Ultra Roller Complete: motore potente, rullo di lavaggio e l'IA a guidare Mova Z70 Ultra Roller Complete: motore potente, ...
Dopo 23 anni di silenzio, Warcraft 3 spi...
Roblox sfida l'ecosistema gaming: app st...
OpenAI accusata di plagio dai migliori m...
Altro attacco hacker dell'IA: gli agenti...
Stiamo davvero perdendo il controllo del...
Microsoft perde un pilastro: Frank Shaw ...
Diablo V annunciato a sorpresa: il colpo...
Meno di 5 euro per il 5G: l'offerta Kena...
World of Warcraft: Forever è il Classic+...
La Serie A con DAZN e Amazon Prime con l...
Giochi Ubisoft su Steam senza Ubisoft Co...
Miami Beach ha autorizzato la maxi opera...
Apple regala un altro anno di funzioni s...
Alla fine è successo davvero: Vol...
Il meglio di Amazon del weekend in uno s...
Chromium
GPU-Z
OCCT
LibreOffice Portable
Opera One Portable
Opera One 106
CCleaner Portable
CCleaner Standard
Cpu-Z
Driver NVIDIA GeForce 546.65 WHQL
SmartFTP
Trillian
Google Chrome Portable
Google Chrome 120
VirtualBox
Tutti gli articoli Tutte le news Tutti i download

Strumenti

Regole
Non Puoi aprire nuove discussioni
Non Puoi rispondere ai messaggi
Non Puoi allegare file
Non Puoi modificare i tuoi messaggi

Il codice vB è On
Le Faccine sono On
Il codice [IMG] è On
Il codice HTML è Off
Vai al Forum


Tutti gli orari sono GMT +1. Ora sono le: 03:42.


Powered by vBulletin® Version 3.6.4
Copyright ©2000 - 2026, Jelsoft Enterprises Ltd.
Served by www3v