Come faccio a decidere se utilizzare ATL, MFC, Win32 o CLR per un nuovo progetto C ++?

StackOverflow https://stackoverflow.com/questions/821676

  •  03-07-2019
  •  | 
  •  

Domanda

Sto appena iniziando il mio primo progetto C ++. Sto usando Visual Studio 2008 . È un'applicazione Windows a modulo singolo che accede a un paio di database e avvia una transazione WebSphere MQ. In pratica capisco le differenze tra ATL, MFC, Win32 (sono un po 'confuso su quello in realtà) e CLR, ma sono in perdita su come dovrei scegliere.

Uno o più di questi sono solo lì per compatibilità con le versioni precedenti?

CLR è una cattiva idea ?

Qualche suggerimento apprezzato.

Modifica Ho scelto il C ++ per questo progetto per motivi che non ho affrontato nel post, che non sono del tutto tecnici. Quindi, assumendo C ++ è l'unica / migliore opzione, quale dovrei scegliere?

È stato utile?

Soluzione

Dipende dalle tue esigenze.

L'uso del CLR ti fornirà il set più espressivo di librerie (l'intero framework .NET), al costo di limitare il tuo eseguibile a richiedere l'installazione di .NET framework in fase di runtime, oltre a limitarti al Piattaforma Windows (tuttavia, tutte e 4 le tecnologie elencate sono solo Windows, quindi la limitazione della piattaforma è probabilmente la meno problematica).

Tuttavia, CLR richiede di utilizzare le estensioni C ++ / CLI per il linguaggio C ++, quindi, in sostanza, dovrai imparare alcune funzionalità del linguaggio extra per poterlo utilizzare. In questo modo avrai molti "extra", " come l'accesso alle librerie .net, la garbage collection completa, ecc.

ATL & amp; Gli MFC sono un po 'più difficili da decidere tra. Ti farei riferimento a Pagina di MSDN per la scelta per decidere tra di loro. La cosa bella di ATL / MFC è che non è necessario il framework .NET, ma solo i runtime VC / MFC da installare per la distribuzione.

L'uso di Win32 fornisce direttamente i file eseguibili più piccoli, con il minor numero di dipendenze, ma richiede più lavoro da scrivere. Hai il minor numero di librerie di helper, quindi stai scrivendo più codice.

Altri suggerimenti

Win32 è il modo grezzo e semplice di farlo. È noioso, difficile da usare e ha molti piccoli dettagli che devi ricordare, altrimenti le cose falliranno in modi relativamente misteriosi.

MFC si basa su Win32 per offrirti un modo orientato agli oggetti di costruire la tua applicazione. Non è un sostituto di Win32, ma piuttosto un miglioramento: fa molto del duro lavoro per te.

System.Windows.Forms (che è quello che presumo tu intendessi per CLR) è completamente diverso ma ha grandi somiglianze con MFC dalla sua struttura di base. È di gran lunga il più semplice da usare, ma richiede il framework .NET, che potrebbe essere o meno un ostacolo nel tuo caso.

Il mio consiglio: se hai bisogno di evitare .NET, usa MFC, altrimenti usa .NET (in effetti, in quel caso, userei C # perché è molto più facile lavorare con).

Per quanto riguarda C ++, vorrei usare WTL. È leggero e avrai poche (se ve ne sono) dipendenze, facilitando la spedizione e l'installazione. Lo trovo molto soddisfacente quando la mia app è composta da un singolo EXE che verrà eseguito sulla maggior parte delle versioni di Windows, ma questo potrebbe non essere un problema per te.

Se invece scegli di utilizzare .NET, C # è quasi sicuramente la strada da percorrere.

Altro in WTL qui:

http://www.codeproject.com/KB/wtl/wtl4mfc1.aspx

Sarei molto curioso di sapere perché lo faresti in C ++. Sulla base della tua breve descrizione, C # sembra una scelta molto più appropriata.

Solo per elaborare un po ', guarda il link che hai fornito descrivendo il CLR C ++. La risposta più votata nota (accuratamente, secondo me) che C ++ è appropriato per "kernel, giochi, app per server e ad alte prestazioni" - nessuno dei quali sembra descrivere ciò che stai facendo.

MFC, ATL, ecc. saranno supportati nel senso che, sì, sarai in grado di compilare la tua app su versioni future di Visual Studio ed eseguirle su versioni future di Windows. Ma non sono supportati nel senso che non ci sono molti nuovi sviluppi in corso nell'API o nella lingua nello stesso modo in cui ci sono nel CLR e in C #.

Non c'è niente di sbagliato in CLR. Come altri qui suggerirei C #, ma poiché hai motivi per restare fedele a C ++, l'utilizzo di .NET framework è parecchie migliaia di volte più facile che fare confusione con ATL / MFC se non li conosci già (IMO).

Vale la pena ricordare che se si utilizza C ++ / CLR, non si utilizza affatto C ++. C ++ / CLR viene compilato in CIL proprio come C #. Non l'ho mai usato da solo, ma credo che il suo scopo sia quello di permetterti di compilare il codice legacy e renderlo facilmente disponibile per il nuovo codice .NET piuttosto che consentire il funzionamento del nuovo codice con i vecchi eseguibili C ++. Esistono altri metodi per chiamare il codice nativo da .NET che, forse, dovresti esplorare.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top