Torna indietro   Hardware Upgrade Forum > Software > Programmazione

Recensione vivo X300 Pro: è ancora lui il re della fotografia mobile, peccato per la batteria
Recensione vivo X300 Pro: è ancora lui il re della fotografia mobile, peccato per la batteria
vivo X300 Pro rappresenta un'evoluzione misurata della serie fotografica del produttore cinese, con un sistema di fotocamere migliorato, chipset Dimensity 9500 di ultima generazione e l'arrivo dell'interfaccia OriginOS 6 anche sui modelli internazionali. La scelta di limitare la batteria a 5.440mAh nel mercato europeo, rispetto ai 6.510mAh disponibili altrove, fa storcere un po' il naso
Lenovo Legion Go 2: Ryzen Z2 Extreme e OLED 8,8'' per spingere gli handheld gaming PC al massimo
Lenovo Legion Go 2: Ryzen Z2 Extreme e OLED 8,8'' per spingere gli handheld gaming PC al massimo
Lenovo Legion Go 2 è la nuova handheld PC gaming con processore AMD Ryzen Z2 Extreme (8 core Zen 5/5c, GPU RDNA 3.5 16 CU) e schermo OLED 8,8" 1920x1200 144Hz. È dotata anche di controller rimovibili TrueStrike con joystick Hall effect e una batteria da 74Wh. Rispetto al dispositivo che l'ha preceduta, migliora ergonomia e prestazioni a basse risoluzioni, ma pesa 920g e costa 1.299€ nella configurazione con 32GB RAM/1TB SSD e Z2 Extreme
AWS re:Invent 2025: inizia l'era dell'AI-as-a-Service con al centro gli agenti
AWS re:Invent 2025: inizia l'era dell'AI-as-a-Service con al centro gli agenti
A re:Invent 2025, AWS mostra un’evoluzione profonda della propria strategia: l’IA diventa una piattaforma di servizi sempre più pronta all’uso, con agenti e modelli preconfigurati che accelerano lo sviluppo, mentre il cloud resta la base imprescindibile per governare dati, complessità e lock-in in uno scenario sempre più orientato all’hybrid cloud
Tutti gli articoli Tutte le news

Vai al Forum
Rispondi
 
Strumenti
Old 15-10-2010, 11:01   #1
fdf86
Member
 
L'Avatar di fdf86
 
Iscritto dal: Apr 2009
Messaggi: 83
[C\C++] Chiamare funzione C++ da C

ciao a tutti! Ho di nuovo bisogno del vostro aiuto.
Ho un simulatore che dispone di un modulo di comunicazione con C..È quindi in grado di convertire nel suo linguaggio una funzione scritta in C..
Questa funzione mi serve per ricevere un input esterno. Finora leggevo dal mouse e quindi bastava una funzione C..ora dovrà essere un device qualsiasi e dovrà leggere dati dal BUS..Questa parte è stata già implementata e funziona..il problema è che è scritta in C++..
Devo quindi scrivere una funzione C che riesca a ricevere dei dati (credo 2 o tre double) da quella funzione C++..
Potrei risolvere comunicando tramite socket ma dovrei avviare un'applicazione c++ durante la simulazione, o no?..Comunque preferirei che il programma di simulazione lavorasse, per così dire, da solo.
Premetto che non sono un programmatore..
per la tesi specialistica in ing Meccanica mi hanno catapultato in questo mondo che mi affascina molto ma che non conosco profondamente..
Ogni consiglio è ben accetto..
Grazie in anticipo,
Francesco
fdf86 è offline   Rispondi citando il messaggio o parte di esso
Old 15-10-2010, 11:07   #2
tuccio`
Senior Member
 
Iscritto dal: Apr 2010
Città: Frosinone
Messaggi: 416
il C++ è un sovrainsieme del C, ragion per cui non puoi fare quello che dici

ps: comunque non ho capito... in che senso è stata già implementata in C++? cioè chi è che ha scritto sta roba in C++ se il simulatore compila (o interpreta?) solo C?

Ultima modifica di tuccio` : 15-10-2010 alle 11:11.
tuccio` è offline   Rispondi citando il messaggio o parte di esso
Old 15-10-2010, 11:31   #3
fdf86
Member
 
L'Avatar di fdf86
 
Iscritto dal: Apr 2009
Messaggi: 83
io avevo pensato fosse impossibile ma speravo di sbagliarmi..
Cerco di spiegarmi meglio..
Si tratta di un progetto ampio..in pratica ci sono vari moduli che comunicano col BUS..per moduli intendo sia software di simulazione che device di input e/o output..
Per rendere tutto flessibile le comunicazioni di dati avvengono tramite BUS cosicché se si vuole cambiare device o simulatore è necessario solo passare al "nuovo arrivato" un config file con le informazioni che gli servono per ricevere ed inviare dati al BUS..
La parte finale, quella che permette di scrivere o leggere sul BUS, è anch'essa universale (scritta in C++ e richiama una JNI) ed in pratica fornisce delle classi che leggono o scrivono sul BUS..quindi dovrebbe essere in qualche modo aggiunta al o richiamata dal codice dello specifico "modulo"..
Spero di aver chiarito..
Quindi? Mi consigliate i socket?
fdf86 è offline   Rispondi citando il messaggio o parte di esso
Old 15-10-2010, 11:37   #4
fdf86
Member
 
L'Avatar di fdf86
 
Iscritto dal: Apr 2009
Messaggi: 83
A ho dimenticato la parte importante ..
Il simulatore in question è OpenModelica..ed ha un suo linguaggio..semplicemente può chiamare una funzione C passandole degli argomenti che poi riottiene modificati (ad esempio)..
Io avevo pensato che la funzione C potesse a sua volta chiamare una funzione C++
fdf86 è offline   Rispondi citando il messaggio o parte di esso
Old 15-10-2010, 11:47   #5
tomminno
Senior Member
 
Iscritto dal: Oct 2005
Messaggi: 3306
Quote:
Originariamente inviato da fdf86 Guarda i messaggi
A ho dimenticato la parte importante ..
Il simulatore in question è OpenModelica..ed ha un suo linguaggio..semplicemente può chiamare una funzione C passandole degli argomenti che poi riottiene modificati (ad esempio)..
Io avevo pensato che la funzione C potesse a sua volta chiamare una funzione C++
funzioni C e C++ sono la stessa cosa.

Generalmente si usa C++ per poter sfruttare il paradigma della programmazione ad oggetti, ovvero strutturando il codice tramite classi.
Richiamare un metodo di una classe da C non è fattibile.
tomminno è offline   Rispondi citando il messaggio o parte di esso
Old 15-10-2010, 11:58   #6
fdf86
Member
 
L'Avatar di fdf86
 
Iscritto dal: Apr 2009
Messaggi: 83
Perdona l'ignoranza..
quindi da C non è possibile neppure richiamare una funzione C++ che usi una classe?..cioè sarebbe la stessa cosa che chiamare la classe direttamente da C?
O, essendo la stessa cosa, neppure le funzioni C++ possono richiamare metodi da classi?..non credo..

Ultima modifica di fdf86 : 15-10-2010 alle 12:05.
fdf86 è offline   Rispondi citando il messaggio o parte di esso
Old 15-10-2010, 12:13   #7
fdf86
Member
 
L'Avatar di fdf86
 
Iscritto dal: Apr 2009
Messaggi: 83
Per intenderci..avevo intenzione di far qualcosa del genere..

http://developers.sun.com/solaris/ar...tml#cpp_from_c


alla voce "Accessing C++ Classes From C"
fdf86 è offline   Rispondi citando il messaggio o parte di esso
Old 15-10-2010, 12:20   #8
tomminno
Senior Member
 
Iscritto dal: Oct 2005
Messaggi: 3306
Quote:
Originariamente inviato da fdf86 Guarda i messaggi
Perdona l'ignoranza..
quindi da C non è possibile neppure richiamare una funzione C++ che usi una classe?..cioè sarebbe la stessa cosa che chiamare la classe direttamente da C?
ma scusa il codice sarà comunque compilato all'interno dello stesso progetto e quindi sarà obbligatoriamente il progetto C++, non dovresti avere problemi particolari.

Quote:
O, essendo la stessa cosa, neppure le funzioni C++ possono richiamare metodi da classi?..non credo..
Nella funzione istanzi un oggetto e richiami il metodo desiderato, ovviamente diventa una "funzione C++" in quanto utilizza caratteristiche proprie del C++.
tomminno è offline   Rispondi citando il messaggio o parte di esso
Old 15-10-2010, 13:19   #9
fdf86
Member
 
L'Avatar di fdf86
 
Iscritto dal: Apr 2009
Messaggi: 83
Quote:
ma scusa il codice sarà comunque compilato all'interno dello stesso progetto e quindi sarà obbligatoriamente il progetto C++, non dovresti avere problemi particolari.
non è proprio così..come ho cercato di spiegare ogni modulo lavora da solo ed invia i risultati (o prende gli input) dal BUS.. è un'altra applicazione che gestisce il tutto..ma avvia semplicemente gli *.exe in pratica.. quindi a me servirebbe che il simulatore funzionasse da solo..l'unica differenza con la versione attuale è che l'input lo dovrà leggere da BUS tramite la classe già scritta invece che tramite la windows.h, come fa ora per prendere le coordinate del mouse.
fdf86 è offline   Rispondi citando il messaggio o parte di esso
Old 15-10-2010, 14:38   #10
tomminno
Senior Member
 
Iscritto dal: Oct 2005
Messaggi: 3306
Quote:
Originariamente inviato da fdf86 Guarda i messaggi
non è proprio così..come ho cercato di spiegare ogni modulo lavora da solo ed invia i risultati (o prende gli input) dal BUS.. è un'altra applicazione che gestisce il tutto..ma avvia semplicemente gli *.exe in pratica.. quindi a me servirebbe che il simulatore funzionasse da solo..l'unica differenza con la versione attuale è che l'input lo dovrà leggere da BUS tramite la classe già scritta invece che tramite la windows.h, come fa ora per prendere le coordinate del mouse.
Si ma cos'è questo Bus di preciso?
Se c'è un meccanismo di comunicazione remota, questo dovrebbe astrarre dal linguaggio specifico.
tomminno è offline   Rispondi citando il messaggio o parte di esso
Old 15-10-2010, 15:02   #11
banryu79
Senior Member
 
L'Avatar di banryu79
 
Iscritto dal: Oct 2007
Città: Padova
Messaggi: 4131
Proviamo a fare chiarezza.
Ovviamente sto tentando di dare una mia intrepetazione (sto tirando a caso).
Ogni deduzione è marcata con un numero tra parentesi e rimanda a un quote per indicare da quali affermazioni è stata dedotta:

Sembra che esista una applicazione, chiamiamola X, che gestisce internamente una sorta di canale di comunicazione, chiamiamolo BUS (1), e che espone un'interfaccia (in C++?) (3) con cui delle applicazioni clienti terze, chiamiamole MODULI, possono comunicare/interagire scambiare dati con detto BUS (1).
Per connettersi al BUS in modo corretto, un MODULO deve conoscere i parametri del protocollo di comunicazione specificati in un file di configurazione fornito da X (2).

Forse X, l'applicazione che gestisce il BUS e ne fornisce l'accesso ai MODULI, è un'applicazione Java che però espone un'interfaccia in C++ (3).

(1)
Quote:
Si tratta di un progetto ampio..in pratica ci sono vari moduli che comunicano col BUS..per moduli intendo sia software di simulazione che device di input e/o output..
(2)
Quote:
Per rendere tutto flessibile le comunicazioni di dati avvengono tramite BUS cosicché se si vuole cambiare device o simulatore è necessario solo passare al "nuovo arrivato" un config file con le informazioni che gli servono per ricevere ed inviare dati al BUS..
(3)
Quote:
La parte finale, quella che permette di scrivere o leggere sul BUS, è anch'essa universale (scritta in C++ e richiama una JNI) ed in pratica fornisce delle classi che leggono o scrivono sul BUS..quindi dovrebbe essere in qualche modo aggiunta al o richiamata dal codice dello specifico "modulo"..
Spero di aver chiarito..
Il problema dell'utente è che sta scrivendo l'implementazione di uno di questi MODULI in linguaggio C e deve interfacciarsi con X che espone un'interfaccia in C++.
E' corretto?

EDIT:
Ok, NON è corretto
__________________

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-10-2010 alle 15:28.
banryu79 è offline   Rispondi citando il messaggio o parte di esso
Old 15-10-2010, 15:18   #12
fdf86
Member
 
L'Avatar di fdf86
 
Iscritto dal: Apr 2009
Messaggi: 83
Non vorrei dirti stupidaggini..ma da quel che ho capito dovrebbe essere proprio il BUS fisico del computer..
come ti ho detto io non sono espertissimo..ma l'azienda in cui sto facendo lo stage si..mi hanno detto che è molto complicato comunicare col BUS direttamente e mi hanno solo accennato al funzionamento di quella parte in JNI di codice (credo sia coperta da segreto industriale tra l'altro).. insomma questo codice crea sul bus uno slot con il nome che vuoi e ci mette dentro la variabile (double o vettore di double) che vuoi iterativamente (sono simulazioni in tempo reale).. Il contenuto dello slot può poi essere letto sempre tramite questo blocco in JNI (basta sapere il nome della variabile e quindi dello slot)...
Comunque il punto non è questo..ho già fatto altri wrapper per altri moduli..
Il problema è che OpenModelica mette a disposizione al massimo un'interfaccia C (un po' come la Mex-Function di Matlab, almeno come concetto, non so se hai presente)..
Quindi se posso creare una funzione C++ che elabori dei dati utilizzando classi e richiamarla in C è ok..altrimenti devo passare i dati via socket..ovvero creo un'altra applicazione c++ che legge e scrive sul BUS ed invia i dati tramite protocollo tcp/ip alla funzione C..
Scusa se non sono chiarissimo e Grazie per l'aiuto comunque!
fdf86 è offline   Rispondi citando il messaggio o parte di esso
Old 15-10-2010, 15:39   #13
tomminno
Senior Member
 
Iscritto dal: Oct 2005
Messaggi: 3306
Quote:
Originariamente inviato da fdf86 Guarda i messaggi
Non vorrei dirti stupidaggini..ma da quel che ho capito dovrebbe essere proprio il BUS fisico del computer..
Ci deve essere un qualche protocollo di comunicazione software. Tra un software e un Bus fisico c'è un abisso nel mezzo almeno su computer, in ambienti embedded c'è comunque un protocollo gestito direttamente dal software. Come passano i dati su questo Bus?

Quote:
Il problema è che OpenModelica mette a disposizione al massimo un'interfaccia C (un po' come la Mex-Function di Matlab, almeno come concetto, non so se hai presente)..
Scusa ma se OpenModelica espone una interfaccia C chi ti vieta di utilizzarla in un programma C++?

Bus -> Wrapper C++ -> C OpenModelica
C OpenModelica -> Wrapper C++ -> Bus

Suppongo che in quest'ultimo caso l'interfaccia di OpenModelica esponga delle funzioni che consentono di ricevere eventuali eventi (callback), se questa dovesse generare degli eventi spontanei.
Il C++ è stato creato appositamente con il (pesante) vincolo di essere compatibile con il C quindi non vedo che problemi tu possa avere nel farli convivere.
tomminno è offline   Rispondi citando il messaggio o parte di esso
Old 15-10-2010, 15:42   #14
fdf86
Member
 
L'Avatar di fdf86
 
Iscritto dal: Apr 2009
Messaggi: 83
Scusa banryu ma stavo già scrivendo quando hai postato..è in parte corretta ma è sicuramente colpa mia..
Diciamo che l'applicazione X non c'è..ogni modulo ha un suo .exe che funziona benissimo (se ci sono dei dati disponibili) da solo..
Vengono lanciati tutti i .exe.

Il BUS è come uno scaffale di documenti..Ogni modulo è un impiegato che riempie i suoi bei documenti e li mette in questo scaffale..
Se ad un altro modulo servono i documenti passa e li prende..(poi se non li trova si lamenta con crash o con messaggi... ma questo è un dettaglio)..
L'importante è che ogni impiegato metta (e prenda) quel che gli serve sullo (e dallo) scaffale.
L'applicazione JNI è lo strumento che mi hanno dato per scrivere sul BUS (che è proprio quello fisico)..potrei anche scrivere un codice che faccia lo stesso in Pascal (se ne fossi capace) ma capite che mi conviene utilizzare quello che ho (è un lavoro di anni)..

il problema quindi lo hai azzeccato comunque..io devo interfacciarmi con questa JNI che espone quest'interfaccia C++..poi sarà lei a fare avanti ed indietro verso lo scaffale

Ultima modifica di fdf86 : 15-10-2010 alle 16:01. Motivo: avevo mancato un pezzo..e scusate se l'esempio è un po' cretino :D
fdf86 è offline   Rispondi citando il messaggio o parte di esso
Old 15-10-2010, 15:53   #15
fdf86
Member
 
L'Avatar di fdf86
 
Iscritto dal: Apr 2009
Messaggi: 83
Quote:
Originariamente inviato da tomminno Guarda i messaggi
Ci deve essere un qualche protocollo di comunicazione software. Tra un software e un Bus fisico c'è un abisso nel mezzo almeno su computer, in ambienti embedded c'è comunque un protocollo gestito direttamente dal software. Come passano i dati su questo Bus?
e che ne so io! ..ti ho detto che non sono un luminare della programmazione..so che lo fa..ho il codice ma non posso studiarlo per ora..non ne ho il tempo e non so se lo capirei..non posso nemmeno passartelo sennò mi mettono in galera..

Quote:
Scusa ma se OpenModelica espone una interfaccia C chi ti vieta di utilizzarla in un programma C++?

Bus -> Wrapper C++ -> C OpenModelica
C OpenModelica -> Wrapper C++ -> Bus

Il C++ è stato creato appositamente con il (pesante) vincolo di essere compatibile con il C quindi non vedo che problemi tu possa avere nel farli convivere.
È quel che chiedevo..all'inizio mi ero spiegato male forse e mi avevate detto che non si poteva fare..
fdf86 è offline   Rispondi citando il messaggio o parte di esso
Old 15-10-2010, 15:54   #16
banryu79
Senior Member
 
L'Avatar di banryu79
 
Iscritto dal: Oct 2007
Città: Padova
Messaggi: 4131
Ma sto JNI per cosa sta?
Non sarà mica Java Native Interface per caso?
__________________

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-10-2010, 16:00   #17
tomminno
Senior Member
 
Iscritto dal: Oct 2005
Messaggi: 3306
Quote:
Originariamente inviato da fdf86 Guarda i messaggi
il problema quindi lo hai azzeccato comunque..io devo interfacciarmi con questa JNI che espone quest'interfaccia C++..poi sarà lei a fare avanti ed indietro verso lo scaffale
Ok che ti devi interfacciare a JNI tramite C++, ma dovrai scrivere codice C++ per farlo!
Questo codice può sia richiamare le funzioni C di OpenModelica sia ovviamente l'interfaccia verso JNI.
tomminno è offline   Rispondi citando il messaggio o parte di esso
Old 15-10-2010, 16:01   #18
tomminno
Senior Member
 
Iscritto dal: Oct 2005
Messaggi: 3306
Quote:
Originariamente inviato da fdf86 Guarda i messaggi
È quel che chiedevo..all'inizio mi ero spiegato male forse e mi avevate detto che non si poteva fare..
Eh non si capiva esattamente cosa volessi fare parlavi di richiamare da C del codice C++, mentre pare che tu debba da C++ richiamare codice C.
tomminno è offline   Rispondi citando il messaggio o parte di esso
Old 15-10-2010, 16:02   #19
tomminno
Senior Member
 
Iscritto dal: Oct 2005
Messaggi: 3306
Quote:
Originariamente inviato da banryu79 Guarda i messaggi
Ma sto JNI per cosa sta?
Non sarà mica Java Native Interface per caso?
Suppongo proprio di si, evidentemente il gestore del bus è in Java.
tomminno è offline   Rispondi citando il messaggio o parte di esso
Old 15-10-2010, 16:12   #20
fdf86
Member
 
L'Avatar di fdf86
 
Iscritto dal: Apr 2009
Messaggi: 83
Quote:
Ma sto JNI per cosa sta?
Non sarà mica Java Native Interface per caso?
Si sta proprio per Java Native Interface..lo avevo dato per scontato..chiedo venia

Quote:
Eh non si capiva esattamente cosa volessi fare parlavi di richiamare da C del codice C++, mentre pare che tu debba da C++ richiamare codice C.
Avevo spiegato bene allora..era quello che intendevo fare..C++ da C..se è possibile ovvio!

io non voglio chiamare OpenModelica da C++..voglio mettere a disposizione della funzione C di OpenModelica una funzione che possa usare il wrapper C++..
Mi spiego meglio..Questa è la vecchia funzione C (per il mouse)

Codice:
#include <windows.h>
#include <winuser.h> 
#include <stdio.h>
#include "prova.h"

void importExt(int val, double* a,double* b)
{
 
POINT coord;

GetCursorPos(&coord);

int d;
d=prova();

*a=(coord.x)-1000;
*b=(coord.y);
  
 FILE *stream;
        
        
        stream=fopen("C:/Users/fdf/Desktop/car0/results.txt","a");
        

        fprintf(stream,"%f \t  %f  \n",*a,*b);
        
        
        
        fclose(stream);
       

return ;

}

Vorrei usare al posto della windows.h un mioC++.h che metta a disposizione una funzioni mioC++ (invece della GetCursor) che passi i due valori che mi servono..
Questi due valori dovrò però leggerli dal BUS usando sta famosa classe che mi danno..

È possibile questo?

P.S.: quella d=prova(); è la funzione c++ che provo a chiamare..ed è vuota per ora :P

Ultima modifica di fdf86 : 15-10-2010 alle 16:22.
fdf86 è offline   Rispondi citando il messaggio o parte di esso
 Rispondi


Recensione vivo X300 Pro: è ancora lui il re della fotografia mobile, peccato per la batteria Recensione vivo X300 Pro: è ancora lui il...
Lenovo Legion Go 2: Ryzen Z2 Extreme e OLED 8,8'' per spingere gli handheld gaming PC al massimo Lenovo Legion Go 2: Ryzen Z2 Extreme e OLED 8,8'...
AWS re:Invent 2025: inizia l'era dell'AI-as-a-Service con al centro gli agenti AWS re:Invent 2025: inizia l'era dell'AI-as-a-Se...
Cos'è la bolla dell'IA e perché se ne parla Cos'è la bolla dell'IA e perché se...
BOOX Palma 2 Pro in prova: l'e-reader diventa a colori, e davvero tascabile BOOX Palma 2 Pro in prova: l'e-reader diventa a ...
I cosmonauti avrebbero riparato tutte le...
Artemis II: la NASA conferma il lancio d...
Il CEO di Embrak Studios difende l'uso d...
Il Trump Phone è sempre più un mistero: ...
OPPO ha svelato la serie Reno 15 "global...
Poste ID diventa a pagamento: l'identità...
7 articoli crollati di prezzo su Amazon ...
Lavatappeti, smacchiatore e Vaporella a ...
Prezzi a picco in 24 ore: due monitor to...
OLED top di gamma LG con super ribasso d...
Il nuovo OnePlus Nord 6 è vicino al debu...
Tesla svela i risultati del Q4: conferma...
Nuova rimodulazione da Fastweb: fino a 3...
La NVIDIA RTX 5090 potrebbe presto costa...
ASUS non produrrà più smar...
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: 19:53.


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