Newsgroup: it.comp.lang.visual-basic
Titolo: Ritorno valore da C

Ho bisogno di richiamare da un'applicazione VB un programmino in C che mi fa
l'elaborazione dei dati, ma poi non so come ripassare il risultato al
programma VB che dovrebbe presentarlo all'utente. Come posso fare?
Grazie!

programma VB che dovrebbe presentarlo all'utente. Come posso fare?
Il "programmino" e' un exe ?
Come ritorna il valore: sulla console, come ritorno della main, in una variabile ?
-- 
ciao, hal
che oggi ha la sfera di cristallo con le pile scariche

 ha scritto nel messaggio
news:9uvdb5$bjcfq$1...@ID-56381.news.dfncis.de...


 writes:
GB> Grazie per aver risposto.
GB>     Il programmino è un exe che gira su consolle. Inoltre io so che la main
GB> può tornare solo un intero, sbaglio?
Non sbagli. main() in C dovrebbe essere definita come intero, se la si
dichiara void  il programma funzionera`  nel 99.99% dei casi  ma nelle
situazioni come la tua verra`  ritornato un valore a pressoche' a caso
(e` il  contenuto della dword  immediatamente sotto il  return address
che nessuno ha inizializzato...).
Per  "pescare" questo  valore ti  conviene lanciare  il  programma con
CreateProcess() e  poi fare una  WaitForSingleObject() sull'handle del
processo creato.
Per  poter prendere  invece  l'output del  programma  devi aprire  una
pipe... In  Unix c'e` la popen() che  non so se e`  disponibile tra le
API di sistema.
-- 
Gian  | main(){printf(&unix["\021%six\012\0"],(unix)["have"]+"fun"-0x60);}
Uberto|                        David Korn, 1987 ioccc best one liner 
Lauri |-------------------------------------------------------------------
(aka saint) >>Vedere X-Nospam nell'header - See X-Nospam field in Header<<

può tornare solo un intero, sbaglio?
Sì, la main torna solo un intero, intero che per ragioni al di là del 
tempo attualmente a mia disposizione è bene, inoltre, che sia minore di 
255. E' per questo che Dio ha creato lo standard output. Ti dico solo 
gli ingredienti, la torta te la cucini poi da solo:
CreatePipe
CreateProcess
ReadFile
WaitForSingleObject
GetExitCodeProcess
CloseHandle
-- 
Nato nel vizio, morto nel supplizio
Nato nel peccato, ad entrare sia invitato

> può tornare solo un intero, sbaglio?
AL> Sì, la main torna solo un intero, intero che per ragioni al di là del 
AL> tempo attualmente a mia disposizione è bene, inoltre, che sia minore di 
AL> 255.
Questa mi giunge nuova. Se ho dichiarato int il return value di main
ho sizeof(int) * 8 bit per rappresentare il return value, usualmente
in complemento a 2.
Detesto  questo  modo di  esporre  le  cose  "prendilo che  e`  giusto
cosi`...". Se non puoi esporre la cosa puoi sempre dare un riferimento
alla cosa.


 writes:
RZ> main() nel C standard _DEVE_ avere come valore di ritorno int.
Ma che palle con questo standard... 
RZ> Cio' non toglie che tutti (o quasi) i compilatori C consentono l'uso di
RZ> void (piu' che altro per supportare codice C precedente allo standard
RZ> (es. K&R, vecchio ANSI, etc...).
Oh, almeno uno che non va dietro lo standard come un talebano! 
P.S. le uniche  due buone ragioni per seguire lo  standard che mi sono
venute in mente sono:
        main()
e` piu` breve di
        void main()
e poi, se un giorno, su un sistema a caso - non tra quelli a me noti -
fosse proprio la dichiarazione void a creare insanabili conflitti e a
mandare il programma in ABEND, quanto ci si metterebbe a pensarci ? :)
RZ> CreatePipe(), CreateNamedPipe(), etc...
Grazie!


 come un talebano!
Gli standard vanno rispettati, altrimenti diventano perfettamente
inutili.
Non č questione di essere un talebano o meno, ma di saper programmare.
Il linguaggio stabilisce delle regole ed esse vanno seguite.
Se la qualitą del sw in circolazione č pessima lo dobbiamo ai
programmatori come te.
Non mi piace essere offensivo ma quando sento queste boiate vado su
tutte le furie.
Ciao.

> come un talebano!
HPL> Gli standard vanno rispettati, altrimenti diventano perfettamente
HPL> inutili.
No. Gli standard vanno rispettati a livello "teorico" per una questione
"qualitativa" del prodotto finito.
Poi ci sono  le pecore che seguono lo standard  senza capire un cavolo
(piu` o  meno come col  dogma dell'Immacolata Concezione) e  non sanno
darti un  semplice motivo pratico per  cui la normativa e`  buona e il
non seguirla e` sbagliato(*). E' questo il fare i talebani.
(*) un esempio e` quello di  questo thread. Se non dichiari int main()
un programma  che testa  il tuo exit  code si  trova un valore  che al
99.99% gli fa prendere la  decisione sbagliata. E questo e` un esempio
semplice che  puo` capitare molto  piu` facilmente -  per ora -  di un
compilatore che genera codice che va in crash perche' main() non torna
un int.
HPL> Non è questione di essere un talebano o meno, ma di saper programmare.
Da qui in poi il tuo cervello soffriva il freddo di questi giorni. Perdonato.


 Perdonato.
Non ho certo nulla da farmi perdonare. E d'ora in avanti non sforzarti a
rispondermi perché non leggerò più i tuoi messaggi, visto che l'unica
cosa che potrei ricavarne è imparare qualcosa di sbagliato.
E per il bene di tutti, smetti di programmare.
Ciao.

>>>> "HPL" == H P L <u...@vaila.ble> writes:
HPL> E per il bene di tutti, smetti di programmare.
Ho forti dubbi sul fatto che tu capisca il giorno dopo quello che
hai scritto il giorno prima. Probabilmente soffri il freddo come
i semiconduttori...
