Torna indietro   Hardware Upgrade Forum > Software > Programmazione

Plaud Note Pro convince per qualità e integrazione, ma l’abbonamento resta un ostacolo
Plaud Note Pro convince per qualità e integrazione, ma l’abbonamento resta un ostacolo
Plaud Note Pro è un registratore digitale elegante e tascabile con app integrata che semplifica trascrizioni e riepiloghi, offre funzioni avanzate come template e note intelligenti, ma resta vincolato a un piano a pagamento per chi ne fa un uso intensivo
Google Pixel 10 è compatto e ha uno zoom 5x a 899€: basta per essere un best-buy?
Google Pixel 10 è compatto e ha uno zoom 5x a 899€: basta per essere un best-buy?
Google Pixel 10 è uno smartphone che unisce una fotocamera molto più versatile rispetto al passato grazie allo zoom ottico 5x, il supporto magnetico Pixelsnap e il nuovo chip Tensor G5. Il dispositivo porta Android 16 e funzionalità AI avanzate come Camera Coach, mantenendo il design caratteristico della serie Pixel con miglioramenti nelle prestazioni e nell'autonomia. In Italia, però, mancano diverse feature peculiari basate sull'AI.
Prova GeForce NOW upgrade Blackwell: il cloud gaming cambia per sempre
Prova GeForce NOW upgrade Blackwell: il cloud gaming cambia per sempre
L'abbonamento Ultimate di GeForce NOW ora comprende la nuova architettura Blackwell RTX con GPU RTX 5080 che garantisce prestazioni tre volte superiori alla precedente generazione. Non si tratta solo di velocità, ma di un'esperienza di gioco migliorata con nuove tecnologie di streaming e un catalogo giochi raddoppiato grazie alla funzione Install-to-Play
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


Plaud Note Pro convince per qualità e integrazione, ma l’abbonamento resta un ostacolo Plaud Note Pro convince per qualità e int...
Google Pixel 10 è compatto e ha uno zoom 5x a 899€: basta per essere un best-buy? Google Pixel 10 è compatto e ha uno zoom ...
Prova GeForce NOW upgrade Blackwell: il cloud gaming cambia per sempre Prova GeForce NOW upgrade Blackwell: il cloud ga...
Ecovacs Deebot X11 Omnicyclone: niente più sacchetto per lo sporco Ecovacs Deebot X11 Omnicyclone: niente più...
Narwal Flow: con il mocio orizzontale lava i pavimenti al meglio Narwal Flow: con il mocio orizzontale lava i pav...
Il satellite cinese Jilin-1 ha fotografa...
Arrivano i nuovi iPhone ed è subi...
Il chip N1 degli iPhone 17 supporta il W...
La cinese Space Pioneer riesce a eseguir...
Xiaomi copia Apple: arriva la serie 17 e...
A 10 anni dalla prima rilevazione delle ...
Samsung annuncia il rilascio della One U...
La nuova MG4 spopola: già 26.000 ...
Monopattini pericolosi? Secondo una rice...
La Commissione Europea respinge le richi...
The Witcher: ecco le prime immagini dell...
Mitsubishi Electric verso l'acquisizione...
Pasticcio Tesla: nessuno vuole il Cybert...
Qualcomm, il nuovo SoC top di gamma &egr...
La memoria che cambierà l'AI: il ...
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: 02:20.


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