View Full Version : [VISUAL C++ 2010] Applicazione con interfaccia grafica che non richieda framework
djgusmy85
27-01-2011, 13:59
Ciao a tutti,
lavoro in un negozio di informatica e per personalizzare i PC che trattiamo ho sviluppato un'applicazione C++ (con dev-c++) che va a modificare i vari settaggi di Windows in modo automatico.
Per ragioni di praticità mi trovo costetto ad implementare un'interfaccia grafica.
Sono quindi passato a Visual C++ 2010 Express, ma ho il problema delle .NET Framework necessarie: per eseguire l'applicazione sui vari PC sono costretto ad installare prima le Framework, vanificando quindi la praticità della cosa.
Ho provato a sviluppare una Win32 nativa, però nel momento in cui inserisco un form sono costretto a convertire l'applicazione in CLR, con conseguenti Framework necessarie.
Come posso risolvere? Solo con una versione più vecchia di Visual C++?
Grazie in anticipo :)
Shinnok.Exor
27-01-2011, 14:21
per eseguire l'applicazione sui vari PC sono costretto ad installare prima le Framework, vanificando quindi la praticità della cosa.
Ho provato a sviluppare una Win32 nativa, però nel momento in cui inserisco un form sono costretto a convertire l'applicazione in CLR, con conseguenti Framework necessarie.
Come posso risolvere? Solo con una versione più vecchia di Visual C++?
Per renderla indipendente dal framework .NET non devi usare i form.
Cioè se aggiungi un form, automaticamente lo rendi un progetto .NET
Per sviluppare GUI indipendenti, devi programmare direttamente con le API di windows (http://mdsn.microsoft.com) in C (usando Visual Studio) senza form builder visuali.
Sennò esistono le librerie Qt (http://qt.nokia.com) o lewxWidgets (http://www.wxwidgets.org) che sono scritte in C++ lavorando ad oggetti.
Le Qt hanno il Qt Creator, che è un IDE che ti permette di costruire frame e dialog in modo visuale.
Anche le wxWidgets hanno un IDE, wxDev-C++
Io ti consiglio le Qt, sono molto leggere e facili da usare, comunque ho usato anche le wxWidgets e non sono male.
djgusmy85
27-01-2011, 21:36
Sennò esistono le librerie Qt (http://qt.nokia.com) o lewxWidgets (http://www.wxwidgets.org) che sono scritte in C++ lavorando ad oggetti.
Le Qt hanno il Qt Creator, che è un IDE che ti permette di costruire frame e dialog in modo visuale.
Anche le wxWidgets hanno un IDE, wxDev-C++
Io ti consiglio le Qt, sono molto leggere e facili da usare, comunque ho usato anche le wxWidgets e non sono male.
Appena ho un attimo a lavoro provo a dare un'occhiata al wxDev-C++. Ho notato che è la naturale evoluzione del Dev-C++ (che uso da sempre), quindi sono più propenso per questo :D
Grazie intanto :)
Se non hai bisogno di cose sofisticate usa direttemente le API di Windows, io le trovo semplici tanto quanto i vari framework e alla fine non hai sbattimenti con DLL e cose varie da portarti dietro. Cercavo anche io un framework "ideale", alla fine mi sono scritto un paio di classi che usano direttamente le API e vivo felice.
Con le wx ho scritto alcuni applicativi, però ricordo che ho dovuto sbattermi non poco su alcune cose che non funzionavano a dovere. Se, come me, lo fai per lavoro... dedicare una settimana a una libreria scritta da te ti darà sicuramente vantaggi e flessibilità in futuro.
Supdario
27-01-2011, 23:21
Ciao a tutti,
lavoro in un negozio di informatica e per personalizzare i PC che trattiamo ho sviluppato un'applicazione C++ (con dev-c++) che va a modificare i vari settaggi di Windows in modo automatico.
Per ragioni di praticità mi trovo costetto ad implementare un'interfaccia grafica.
Sono quindi passato a Visual C++ 2010 Express, ma ho il problema delle .NET Framework necessarie: per eseguire l'applicazione sui vari PC sono costretto ad installare prima le Framework, vanificando quindi la praticità della cosa.
Ho provato a sviluppare una Win32 nativa, però nel momento in cui inserisco un form sono costretto a convertire l'applicazione in CLR, con conseguenti Framework necessarie.
Come posso risolvere? Solo con una versione più vecchia di Visual C++?
Grazie in anticipo :)
Devi fare un progetto MFC e compilare il tuo progetto come Multithread (al posto di DLL multithread). Inoltre devi anche impostare di usare MFC come libreria statica, e non dinamica.
tomminno
28-01-2011, 01:11
Se non hai bisogno di cose sofisticate usa direttemente le API di Windows, io le trovo semplici tanto quanto i vari framework e alla fine non hai sbattimenti con DLL e cose varie da portarti dietro. Cercavo anche io un framework "ideale", alla fine mi sono scritto un paio di classi che usano direttamente le API e vivo felice.
Qualunque cosa è meglio delle Win32. Quanto sbattimento per fare le cose più banali!
Con le wx ho scritto alcuni applicativi, però ricordo che ho dovuto sbattermi non poco su alcune cose che non funzionavano a dovere. Se, come me, lo fai per lavoro... dedicare una settimana a una libreria scritta da te ti darà sicuramente vantaggi e flessibilità in futuro.
Le wx non sono certo il massimo della vita e ad oggi sicuramente guarderei altrove per un nuovo progetto, ma non ho mai riscontrato particolari problemi anche con interfacce mediamente complicate, roba che a farla con le Win32 forse avrei perso un anno di vita.
Poi uno guarda cosa si può fare con Qt e la facilità con cui si riescono a fare interfacce molto moderne, pure multipiattaforma, che a pensare di realizzare con Win32 ti prende lo spavento e abbandoni tutto.
Shinnok.Exor
28-01-2011, 09:05
E' normale che lavorando direttamente con le API incontri delle difficoltà a livello pratico, ma sono cose che si superano dopo poco.
Anch'io personalmente oggi lavoro direttamente con le API in C, comunque a quello che ho capito il progetto che dovrà realizzare non è professionale, quindi in poche parole meglio farlo con facilità che "bene".
Poi alla fine anche programmando con le wxWidgets o Qt non è che esca proprio una cosa senza senso, sono ben fatte, anche se includono molto codice che ingombrano l'exe inutilmente, ma almeno ti risparmiano la fatica di creare frame programmandoli direttamente da codice.
Lavorando con Visual Studio alla fine sarai sempre dipendente, minimo, dalle librerie Visual C++ redistribuitable.
Poi se crei anche Form ecc... , allora sarai dipendente anche dal framework .NET
tomminno
28-01-2011, 14:22
Poi alla fine anche programmando con le wxWidgets o Qt non è che esca proprio una cosa senza senso, sono ben fatte, anche se includono molto codice che ingombrano l'exe inutilmente, ma almeno ti risparmiano la fatica di creare frame programmandoli direttamente da codice.
Nell'era dei Terabyte stiamo ancora a preoccuparci se un eseguibile pesa 700Kb o 2 Mb?
Lavorando con Visual Studio alla fine sarai sempre dipendente, minimo, dalle librerie Visual C++ redistribuitable.
Sempre che non compili tutto staticamente
Poi se crei anche Form ecc... , allora sarai dipendente anche dal framework .NET
Da Vista in poi .Net è integrato
djgusmy85
08-02-2011, 16:40
Sempre che non compili tutto staticamente
Cosa intendi con questa frase? Esiste quindi un modo per programmare in Visual C++ ed avere un eseguibile completamente autonomo?
djgusmy85
23-04-2011, 13:35
Cosa intendi con questa frase? Esiste quindi un modo per programmare in Visual C++ ed avere un eseguibile completamente autonomo?
up :)
up :)
Non con .NET, ma con le Qt credo sia possibile includere le librerie che usi direttamente nell'eseguibile ;).
limpid-sky
23-04-2011, 17:41
Non con .NET, ma con le Qt credo sia possibile includere le librerie che usi direttamente nell'eseguibile ;).
quoto stessa cosa con le wxwidgets che da programmatore dilettante ho usato con successo per fare semplici programmini.
l'esegibile ti viene un po grande, mi sembra un 3-4mega ma non hai bisogno di altro se lo includi staticamente.
djgusmy85
23-04-2011, 18:49
stessa cosa con le wxwidgets che da programmatore dilettante ho usato con successo per fare semplici programmini.
Ottimo, è proprio quello che mi serve. Che IDE usavi? :)
limpid-sky
23-04-2011, 19:28
wx devc++ che è già pronto anche se a volte crasha. in alternativa c'è codeblocks.
Nell'era dei Terabyte stiamo ancora a preoccuparci se un eseguibile pesa 700Kb o 2 Mb?
Yes ;) C'è chi ne fa anche un cavallo di battaglia
Supdario
24-04-2011, 23:44
up :)
Basta compilare il proprio progetto staticamente (attraverso la relativa opzione nelle opzioni del progetto, impostando Multithread al posto di DLL Multithread).
Nel caso si utilizzi l'interfaccia grafica basta fare un progetto MFC e selezionare l'opzione che ho indicato sopra, assieme alla scelta di includere MFC come libreria statica.
In questo modo si può avere un progetto C++ con tanto di GUI, senza dover dipendere da .NET o dal Visual C++ Redistributable (dato che alla fine tutto ciò che serve sarà incluso nell'eseguibile, anche se ovviamente peserà un po' di più rispetto ad uno compilato dinamicamente).
Basta compilare il proprio progetto staticamente (attraverso la relativa opzione nelle opzioni del progetto, impostando Multithread al posto di DLL Multithread).
Nel caso si utilizzi l'interfaccia grafica basta fare un progetto MFC e selezionare l'opzione che ho indicato sopra, assieme alla scelta di includere MFC come libreria statica.
In questo modo si può avere un progetto C++ con tanto di GUI, senza dover dipendere da .NET o dal Visual C++ Redistributable (dato che alla fine tutto ciò che serve sarà incluso nell'eseguibile, anche se ovviamente peserà un po' di più rispetto ad uno compilato dinamicamente).
domandona
ma quasto lo posso fare anche in visaul c# perche dovrei fare un programmino per il lavoro solo che al lavoro non c'e il framework e non c posso installare nulla e se si c sarebbe una guida che mostra dove andare ad impostare per i collegamenti statici
Appena ho un attimo a lavoro provo a dare un'occhiata al wxDev-C++. Ho notato che è la naturale evoluzione del Dev-C++ (che uso da sempre), quindi sono più propenso per questo :D
Grazie intanto :)
Lascia perdere ;)
Vai su QT e QtCreator. Dopo non userai più Dev-C++ (o le sue evoluzioni).
Con le QT l'eseguibile è completamente autonomo, basta mettere le DLL nella stessa directory dell'eseguibile.
Quindi in sostanza puoi tranquillamente portarti dietro una directory mettere quella directory sul PC e lanciarlo direttamente.
Poi si potrebbero studiare anche altri metodi per creare un solo eseguibile dalle dll e dall'eseguibile...ma non vedo quale differenza ti possa fare.
djgusmy85
30-04-2011, 11:04
Lascia perdere ;)
Vai su QT e QtCreator. Dopo non userai più Dev-C++ (o le sue evoluzioni).
Con le QT l'eseguibile è completamente autonomo, basta mettere le DLL nella stessa directory dell'eseguibile.
Quindi in sostanza puoi tranquillamente portarti dietro una directory mettere quella directory sul PC e lanciarlo direttamente.
Poi si potrebbero studiare anche altri metodi per creare un solo eseguibile dalle dll e dall'eseguibile...ma non vedo quale differenza ti possa fare.
Sono partito col wxDev-C++ per i motivi che dicevo, ma non mi sono trovato. La presenza di bachi è stata evidente da subito, instabilità, crash, e anche le potenzialità grafiche non mi sono sembrate un granchè.
..e fu così che passai alle Qt :D
Ho avuto un'impressione di solidità e stabilità dal primo istante, non credo che mi muoverò più da quì.
Adesso sto cercando di correggere il vecchio programma per farlo compilare anche con Qt creator (ho vari problemi con cout, strcat, ifstream e cose così, dovuti a librerie obsolete che usavo con Dev-C++) e poi procedo con il resto...
Ooops, non avevo visto che era un thread vecchio :stordita:
Supdario
30-04-2011, 14:02
domandona
ma quasto lo posso fare anche in visaul c# perche dovrei fare un programmino per il lavoro solo che al lavoro non c'e il framework e non c posso installare nulla e se si c sarebbe una guida che mostra dove andare ad impostare per i collegamenti statici
Con il C# non si può fare, è un linguaggio interpretato basato esclusivamente sul .NET Framework.
djgusmy85
01-05-2011, 15:41
Ooops, non avevo visto che era un thread vecchio :stordita:
Ne approfitto per farti una domandina rapida... :D
Nel file .cpp ho la funzione principale (dove vengono gestite le liste) e gli slot dei QPushButton. Come posso fare a passare i parametri della lista agli slot? Mi servirebbe una cosa tipo:
void ina::on_Button_SelezionaPredefinite_clicked(LISTA* testa_lista)
Attualmente uso il classico:
void ina::on_Button_SelezionaPredefinite_clicked()
senza parametri, con testa_lista variabile globale, ma ovviamente è una soluzione temporanea.
Come posso fare?
Grazie :)
vBulletin® v3.6.4, Copyright ©2000-2025, Jelsoft Enterprises Ltd.