Torna indietro   Hardware Upgrade Forum > Software > Programmazione

Recensione Samsung Galaxy S26 Ultra: finalmente qualcosa di nuovo
Recensione Samsung Galaxy S26 Ultra: finalmente qualcosa di nuovo
Per diversi giorni il Galaxy S26 Ultra di Samsung è stato il nostro compagno di vita. Oltre alle conferme del colosso coreano come la qualità del display e una suite AI senza rivali, arriva il Privacy Display, un unicum nel mondo smartphone. Ci sono ancora alcuni gap che non sono riusciti a colmare lato batteria e fotocamera, seppur con alcuni miglioramenti.
Diablo II Resurrected: il nuovo DLC Reign of the Warlock
Diablo II Resurrected: il nuovo DLC Reign of the Warlock
Abbiamo provato per voi il nuovo DLC lanciato a sorpresa da Blizzard per Diablo II: Resurrected e quella che segue è una disamina dei nuovi contenuti che abbiamo avuto modo di sperimentare nel corso delle nostre sessioni di gioco, con particolare riguardo per la nuova classe dello Stregone
Deep Tech Revolution: così Area Science Park apre i laboratori alle startup
Deep Tech Revolution: così Area Science Park apre i laboratori alle startup
Siamo tornati nel parco tecnologico di Trieste per il kick-off del programma che mette a disposizione di cinque startup le infrastrutture di ricerca, dal sincrotrone Elettra ai laboratori di genomica e HPC. Roberto Pillon racconta il modello e la visione
Tutti gli articoli Tutte le news

Vai al Forum
Rispondi
 
Strumenti
Old 14-07-2009, 21: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, 11: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, 12: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, 13: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, 13: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 13:51.
banryu79 è offline   Rispondi citando il messaggio o parte di esso
Old 15-07-2009, 14: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, 19: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, 20: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


Recensione Samsung Galaxy S26 Ultra: finalmente qualcosa di nuovo Recensione Samsung Galaxy S26 Ultra: finalmente ...
Diablo II Resurrected: il nuovo DLC Reign of the Warlock Diablo II Resurrected: il nuovo DLC Reign of the...
Deep Tech Revolution: così Area Science Park apre i laboratori alle startup Deep Tech Revolution: così Area Science P...
HP OMEN MAX 16 con RTX 5080: potenza da desktop replacement a prezzo competitivo HP OMEN MAX 16 con RTX 5080: potenza da desktop ...
Recensione Google Pixel 10a, si migliora poco ma è sempre un'ottima scelta Recensione Google Pixel 10a, si migliora poco ma...
Le analisi di ALMA sulla cometa interste...
La missione cinese Tianwen-3 per portare...
Un satellite di HEO Space ha catturato u...
Mini LED 144Hz a prezzo folle: questo Hi...
Novità per Fortinet: arrivano For...
Volkswagen e Xpeng, il SUV è real...
Volkswagen ribattezza ID.3 e le dà un mo...
Aruba rende disponibile VMware Hosted Pr...
Questa Olympus da 20 MP con stabilizzazi...
Il nuovo dispositivo di Rabbit si chiama...
'Se avete RAM, siamo pronti ad acquistar...
Veeam corregge diverse vulnerabilit&agra...
MacBook Neo segna una svolta per Apple: ...
Polestar pubblica il report LCA di Poles...
Il rame non basta più: NVIDIA, AM...
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: 21:25.


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