È MFC ancora utilizzato per la realizzazione di nuove (con qualsiasi materiale, il volume)?

Non sono mai stato un grande fan di MFC, ma che non è davvero il punto. Ho letto che Microsoft è dovuto al rilascio di una nuova versione di MFC, nel 2010, e mi ha colpito come strano – pensai, MFC era morto (non malato intenzione, l’ho fatto veramente).

È MFC utilizzato per nuovi sviluppi? Se è così, che cosa è il beneficio? Non potevo immaginare di non avere alcun beneficio, qualcosa come C# (o anche solo il c++ utilizzando le Api Win32 per quella materia).

  • A questa domanda non sembra essere molto diverso rispetto al tuo ultimo (stackoverflow.com/questions/2269860/…). Si dovrebbe modificare domande invece di reasking di loro in modi leggermente diversi.
  • La domanda che ho creato prima era basata su valutazioni soggettive antipatia di MFC, questa domanda è domandarsi MFC rilevanza nel presente. Non sapevo avrei potuto modificare l’altra domanda (dopo che è stato chiuso) che era molto meno pensato. Anche io sono nel processo di eliminazione di quella domanda.
InformationsquelleAutor NTDLS | 2010-02-16



7 Replies
  1. 24

    C’è un sacco di codice utilizzando MFC. Vedo queste domande per tutto il tempo è ancora usato è che usa ancora la risposta è sì. Io lavoro in una grande organizzazione che ancora impiega centinaia di persone che scrivono in cobol. Se mai lo è stato utilizzato in azienda continuerà a essere utilizzato fino a quando non c’è più l’hardware per il supporto, quindi alcune società di pagare qualcuno per scrivere un emulatore in modo che il vecchio codice, continuano a funzionare.

    Marina usa ancora le navi con i computer con nuclei magnetici per la memoria e sono sicuro che hanno le persone per lavorare su di essi. La tecnologia una volta creato, non può mai non essere supportata. è un po ‘ il caso di Deus ex machina, dove le organizzazioni di grandi dimensioni non sono completamente sicuro di quello che il loro sistema fare e di avere un senso opprimente di paura di portare l’impresa al ginocchio che non hanno alcun desiderio di provare nuove conio tecnologie(BTW paghiamo IBM per la migliore assistenza su OS2).

    Anche mfc è perfettamente accettabile soluzione per lo sviluppo di windows dato che è un modello di oggetto che avvolge le API di Sistema che è praticamente tutto quello che la maggior parte delle persone ottenere fuori .net.


    Come un addendum e dal momento che questa domanda è un bounty questa è una citazione da MS per quanto riguarda mfc VS 11

    In ogni scatto, dobbiamo bilanciare il nostro investimento nelle diverse aree di prodotto. Tuttavia, crediamo ancora che la MFC è la più completa libreria per la creazione di applicazioni native. Siamo pienamente impegnati a sostenere e mantenere MFC ad un alto livello di qualità. Ecco un breve elenco di alcuni dei problemi che abbiamo risolto in MFC per Visual Studio 11:

    Qui è il link se vuoi leggere il post completo

  2. 18

    Frescura non fattore nella scelta della tecnologia per un nuovo sistema. Sì, se sei uno studente o vuole giocare intorno a voi scegliere quello che si vuole.

    Ma nel mondo reale, ogni tecnologia ha i suoi vantaggi e svantaggi. Un anno fa una delle squadre che ha iniziato un nuovo progetto, è stato deciso che sarà fatto in MFC.
    Il motivo è molto semplice: utilizzare le api di windows un sacco per il basso livello di operazioni con la stampante, internet explorer e dio solo sa cos’altro.

    C# non era ancora in gioco, la decisione è stata presa tra MFC e QT, entrambi avevano bisogno di una funzionalità, entrambi possono integrare facilmente il basso livello di funzionalità, l’unica differenza è che alcuni membri del team avevano già MFC esperienza, in modo da non dover perdere tempo e soldi con corsi di formazione.

    Supponiamo che scelgono di C# e WPF:


    -1 È necessario avvolgere tutti nativo C++ e ASM codice in una DLL (ouch questo può essere doloroso, invece di codificare la scrittura wrapper).


    -1 probabilmente bisogno di due team, uno per l’interfaccia utente, una per il winapi roba. È molto improbabile che troverete un sacco di gente in grado di scrivere sia in C# e winapi roba. Convenuto che in entrambi i casi si ha bisogno di qualcuno per rendere l’interfaccia più bella (i programmatori di solito succhiare e costano di più), ma almeno con il C++ solo il codice, non c’è più il tempo di attesa tra due squadre, hanno bisogno di un’interfaccia utente modifica, nessun problema e non ho bisogno di attendere che il designer dell’interfaccia utente, lo farà piuttosto tardi.


    +1 Si può scrivere il codice dell’interfaccia utente in C# e WPF, diciamo che lo sviluppo dell’interfaccia utente è più veloce, ma l’interfaccia utente è solo 1/4 del progetto, in modo che il guadagno totale è probabilmente molto piccolo.

    -1 degrado delle Prestazioni: per ogni piccola operazione si può fare in C# si chiama una DLL esterna (questo è un problema minore, dato che il programma viene eseguito su 8GB di RAM Quad Core).

    Quindi, in conclusione: MFC è ancora utilizzato per un nuovo sviluppo, poiché le esigenze e i costi di decidere la tecnologia per un progetto e così succede che, MFC è il migliore in alcuni casi.

    • Hmmm…Molto buona spiegazione!!! Voglio iniziare ad imparare il C++ lo sviluppo di GUI. Dovrei imparare MFC o QT? Voi cosa dite? Ho offerto il bounty. Per favore mi dia un buon consiglio per ottenere l’accettazione. Posso usare MFC/QT sia per Dx/OpenGL sviluppo di giochi e applicazioni Data-driven?
    • In generale trovo Qt è usato più che MFC dal momento che è multipiattaforma e gratuito. In un progetto che abbiamo usato su un dispositivo embedded personalizzato distro Linux. Non ho mai utilizzare Dx/OpenGl con MFC o QT, ma poiché Dx/OpenGL, richiedono solo una finestra dal programma, non vedo il motivo per non lavorare con entrambe le MFC e QT.
    • Dx/OpenGl è qualcosa che ho fatto in un college e per divertimento, quindi non ho alcun ‘reale’ esperienza con esso, ma mi ricordo che c’erano alcuni quadri come “irrlicht” che ha offerto un sacco di funzionalità, tra le finestre di dialogo di windows per la GUI. Quindi credo che la cosa ha più senso utilizzare un tale quadro di riferimento, se si vuole sviluppare Dx/OpenGL.
  3. 14

    MFC è ancora usato per qualche nuovo sviluppo, e un sacco di manutenzione di sviluppo (anche all’interno di Microsoft).

    Mentre può essere minuziosamente più lento rispetto alle API Win32 direttamente, la perdita di prestazioni è davvero piccolo-raramente tanto quanto un intero per cento. Utilizzando .NET, la perdita di prestazioni è notevolmente maggiore (nel mio test, raramente inferiore al 10%, con 20-30% di tipico, e ancora più pesante per il calcolo. Solo per esempio, ho un programma che fa Autovettore/calcolo degli Autovalori abbastanza matrici di grandi dimensioni. La mia versione originale utilizzando C++ e MFC viene eseguito un test per solo meno di un minuto sul nostro standard di una macchina di prova. Alcuni dei miei colleghi ha deciso che sarebbe stato bello ri-implementare in C#. La loro versione dura quasi tre minuti sulla stessa macchina (quad core, 16-giga di RAM, quindi no, non “legacy” hardware). Devo ammettere che non ho guardato il loro codice è troppo stretta, così forse potrebbe essere migliorato, ma sono decenti programmatori così per 3 a 1 il miglioramento mi sembra improbabile.

    Con MFC, è anche facile da bypassare il quadro e utilizzare l’API Win32, direttamente quando/se si desidera. Con .NET, è può uso P/Invoke, ma è abbastanza doloroso confronto.

    • Quanto di questo è dovuto alla GUI però? Presumibilmente stai usando qualcosa come Intel MKL per la matematica in entrambi i casi, così che cosa è in realtà la causa di questa differenza?
    • questo particolare programma non utilizza al di fuori del codice in uno qualsiasi dei percorsi critici. Se ti perdona il mio tono un tantino presuntuoso, Intel, i programmatori sono bravi a ottimizzare — ma sto meglio. Più seriamente, un sacco di Intel ottimizzazioni (casualmente o meno) fare abbastanza male su processori AMD, che era inaccettabile per questo codice.
  4. 8

    MFC è stato aggiornato con ogni versione di Visual Studio. Non è proprio il titolo funzione di elemento.

    Come per un nuovo sviluppo, sì. Esso è ancora utilizzato e continuerà ad essere così (anche se io, come te, preferisce non). Molte organizzazioni fatto la scelta tecnologica di anni fa e non hanno alcun motivo per cambiare.

    Penso che si sta parlando di ben stabilito negozi però, gente con più interesse al mantenimento /valorizzazione di ciò che è stato scritto, piuttosto che rimanere all’avanguardia.

  5. 8

    Il rilascio del MFC Feature Pack (uno o due anni fa, iirc) è stato il più grande estensione di MFC da circa 10 anni e che si è dato molto un nuovo impulso allo sviluppo MFC. Credo che un sacco di aziende hanno deciso di mantenere le loro applicazioni legacy, spingere in avanti e delevelop nuove applicazioni sulla sua base.

    Per me (come qualcuno che ha da mantenere una grande applicazione MFC) il problema più grande è il calo di sviluppo e di sostegno (Microsoft e di terze parti) componenti, piuttosto che di MFC. Per esempio, è il porting a 64 bit non è facile se molto vecchio e non supportato puro 32bit Active-X assemblaggio dei componenti dell’applicazione.

  6. 3

    Ci sono vantaggi a stare lontano da codice gestito (forse stai per scrivere un driver UI, o fare COM).

    Che e c’è tonnellate di codice MFC là fuori. Forse si lavora per la Società X, e la necessità di utilizzare uno dei infinità di Dll che abbiamo scritto negli ultimi dodici anni.

    • D’accordo! Io sono della vecchia scuola, fan di codice non gestito – ma non so se si possono scrivere i driver utilizzando MFC (non sto dicendo che non è possibile, ho appena non credo si può. Certamente non è un driver in modalità kernel).
    • Intendevo driver dell’interfaccia utente (come una “finestra di Dialogo della Stampante” o qualcosa del genere). Codifica up finestre di dialogo MFC è davvero veloce.
    • Io sono molto più abituare alla creazione di C++ Win32 applicazione che utilizza un basic editor di risorse e un WinProc richiamata – che per me è molto più veloce. Soggettivo, sì, ma personalmente vedo poco appello nell’utilizzo di MFC per tali applicazioni. Questo non fa di me a destra con qualsiasi mezzo.
    • Naturalmente a scrivere qualcosa senza MFC è più lento se uno non sa MFC. A scrivere la stessa applicazione con MFC è molto più veloce che scrivere l’equivalente in win32, dato competente programmatore.
  7. 2

    Ho fatto un progetto lo scorso anno, in base alle MFC. Non so perché, MFC è stato scelto, ma è stato sufficiente per la realizzazione di un ambiente virtuale in 3D graphic user interface (interfaccia di costruzione di sistema di gestione della sicurezza—con 10 frame al secondo, la frequenza di aggiornamento a funzionare in modo efficiente su win32 basato su Pc, risalente alla metà degli anni 1990. Il file eseguibile (che richiede solo core win32 Dll di sistema) è a meno di 400K—di non facile realizzazione con strumenti moderni.

    • Così, lo sviluppo di “legacy” sistemi? (Non voglio essere critico, mi piace sistemi legacy). Il mio problema è che la DLL MFC erano ENORMI (per il loro tempo) e molto inefficiente. Quindi, se le dimensioni o la velocità sono una preoccupazione perché non solo bastone con il Win32APIs?
    • A causa di win32 è un enorme passo indietro nel tempo di sviluppo e la finirete di scrivere wrapper per renderlo più OO comunque. MFC dll non sono enormi, e se è davvero un problema è comunque possibile collegare staticamente.
    • Così dll MFC sono enormi? Credo che tu pensi .net framework è più piccolo, pensa di nuovo. Anche io sono curioso di sapere come si utilizza il collegamento statico di codice C# (in modo che venga eseguito senza l’ .net dll)
    • Nessun uomo! Io sono un grande ol’ fan .net ma che quadro è un mammut! C# è il modo tI provare ad andare con nuovi progetti, ma ho un grosso amore per C/C++, Win32… ma preferisco di gran lunga farlo senza MFC. Se vado ottenuto efficienza il più basso livello di linguaggio capisco poi vado come nativo come posso.
    • Ora .NET Core fa. BTW, non è destinata per lo sviluppo di GUI…

Lascia un commento