Newsgroup: it.comp.programmare.win32
Titolo: Eseguibile in linguaggio macchina con visual studio 2008

Salve a tutti,
vorrei porvi questo quesito:
utilizzo visual studio 2008 su piattaforma windows server 2003 :
come posso generare un semplice eseguibile (per esempio scritto in c+
+),
che magari stampa su schermo solo "ciao mondo",
che non utilizzi grafica ma che posso far girare su qualsiasi windows
(da windows 95 fino a windows xp per esempio)  ?
Ricordo che con il vecchio visual studio 6 cio' era possibile,
ma se adopero il visual studio 2008 sembra non funzionare
(se scelgo "win 32 console application" (e metto anche "no clr
support") ) e poi copio il .exe
su una macchina che ha win xp, non parte e mi da solo un messaggio del
tipo
"errore nel far partire l'applicazione" senza nessun altro messaggio.
In parole povere, è possibile generare, con vs2008, un semplice .exe
che è già in linguaggio
macchina (e non in IL ) e che possa girare su quasi tutti i windows?
E, se non fosse possibile, quale strumento (magari open source)
potrei usare?

 macchina (e non in IL ) e che possa girare su quasi tutti i windows?
Non sono sicuro m a non credo che VC 2008 genera codice IL quando generi 
progetti Win32.
Visual c++ 2008 utilizza le nuove librerie runtime del c++ per cui se 
vuoi far funzionare i programmi che generi devi installarle.
http://www.microsoft.com/downloads/details.aspx?familyid=2051a0c1-c9b5-4b0a-a8f5-770a549fd78c&DisplayLang=it
Attenzione alla versione a 64 e 32 bit.


Dimenticavo di dirti che inoltre tutte le versioni debug delle 
applicazioni generate non funzioneranno.

 Attenzione alla versione a 64 e 32 bit.
+1
-- 
Raffaele Rialdi  
http://www.iamraf.net
Weblog: 
http://blogs.ugidotnet.org/raffaele
Microsoft MVP profile 
https://mvp.support.microsoft.com/profile/raffaele
UGIdotNET - 
http://www.ugidotnet.org/


Secondo me potrei provare con il compilatore gcc per dos e windows:
http://www.delorie.com/djgpp/
Ricordo che lo utilizzavo in windows 95 e girava bene su tutti i
sistemi
dos e windows dell'epoca (era l'anno 1999 ): inoltre l'eseguibile
prodotto in linguaggio macchina potevo farlo girare su qualsiasi
sistema windows dell'epoca.
Sul suddetto sito, nella descrizione, dice che funziona bene anche sui
sistemi NT,
vorrei sapere se questo mi garantisce che gira bene anche nei sistemi
windows 2003 server e xp
(mi basterebbe che l'eseguibile, fatto in uno di questi due sistemi,
possa girare poi su entrambi).
Qualcuno sa qualcosa, riguardo il suddetto compilatore, se funziona
bene in windows xp e windows 2003 server ?

 bene in windows xp e windows 2003 server ?
Su questo non saprei risponderti.



Io sono molto più esperto di programmazione c++ in unix (o linux) ,
ma attualmente ho un "vincolo" (che non sto qui a spiegarvi)
per cui ho l'esigenza di avere un eseguibile autoconsistente (in
linguaggio macchina x86) che almeno giri
su win 2003 server e win xp (entrambi a 32 bit) .
Comunque, per ora, buone notizie.
Ho installato il compilatore gnu c++ ( djgpp ) su win 2003 server
(prelevando i files tramite l'indicazione date nel form:
http://www.delorie.com/djgpp/zip-picker.html
    (ho scelto l'opzione
win2000/xp )  );
ho fatto alcuni exe di miei programmi c++ e funziona tutto bene.
Ora devo provare se questi exe funzionano anche in win xp .
Ciao.

 Ora devo provare se questi exe funzionano anche in win xp .
A questo punto perï¿œ non capisco in cosa hai avuto problemi con 
VC++2008/2010 ...?!?!



non so perchè avevo problemi con vs2008 :
io sceglievo "win32 console application", language c++  e "senza
supporto clr" (per cui mi aspettavo che l'eseguibile
prodotto era solo in linguaggio macchina (per cui unmanaged)) e poi,
lo stesso eseguibile (che su win 2003 girava bene)
su win xp dava errore che già ho descritto , anche se non usava altre
dll (era una semplice printf di "ciao mondo") ) .
Comunque con gnu c++ ho risolto, oltre che su win 2003 gli eseguibili
ho verificato, proprio ora, che girano bene anche su win xp .
Per cui tutto risolto .
Grazie.
Ciao.

che brutta storia ... :-(

 che brutta storia ... :-(
Non so che intendi ma mi sono documentato sul discorso redist library:
Per VS2008 il package di redistribuzione è necessario perché veniva 
usato il sistema di Fusion. Purtroppo rende il deploy più complicato ma 
dovrebbe bastare installare questo:
http://www.microsoft.com/downloads/en/details.aspx?FamilyID=a5c84275-3b97-4ab7-a40d-3802b2af5fc2
(VC++2008 SP1)
Per VS2010 il tutto è tornato ai vecchi tempi e quindi solo legati 
dalle CRT. Di conseguenza anche il messaggio di errore è decisamente 
più comprensibile.
Ad ogni modo per fare un setup ben fatto esiste sempre il package di 
redist:
http://www.microsoft.com/downloads/en/details.aspx?FamilyID=a7b7a05e-6de6-4d3a-a423-37bf0912db84
In ogni caso installando il corrispondente redist il deploy dovrebbe 
essere semplice quanto compiare l'exe e avviarlo.



Un exe prodotto con Visual Studio, anche di tipo console, utilizza 
sempre almeno MSVCRxx.DLL, dove xx è la versione: nel caso di vs2008 xx 
= 90.
Questa DLL deve essere presente nel PC di destinazione, per cui 
bisognerebbe fornirla sempre insieme all'exe, a meno che sul PC di 
destinazione non sia già presente perchè installata da qualche altro 
applicativo o, ad esempio, service pack di Windows.
La DLL a sua volta potrebbe utilizzare anche anche DLL, le quali 
dovranno essere presenti anch'esse.
Dal sito microsoft, è possibile scaricare l'apposito "Visual C++ 2008 
Redistributable Package", che contiene l'installazione di tutte le dll 
necessarie, quindi anche MFC, ATL, ecc.
Bisognerebbe sempre fornire questo package da installare, per essere 
sicuri che l'exe funzioni.
In ogni caso puoi utilizzare un tool tipo "Dependency Walker", che ti 
dice quali dll vengono utilizzate dall'exe.