2009-07-19 4 views
8

Esistono differenze fondamentali in WinAPI/Win32? Sono necessarie ulteriori conoscenze per sfruttare le nuove funzionalità del sistema operativo?API Windows per VISTA, 7 e oltre

Ci sono delle insidie ​​in cui potrebbe cadere una persona che ha codificato le app Win32 in passato?

Non sto parlando di Silverlight, è tutta un'altra palla di cera. (Non ho ancora il VS che lo supporta al lavoro.)

Modifica: Drew ha una buona risposta finora, ma cosa è fondamentale sapere per un programmatore? cioè cosa dovrebbe essere in un'appendice del libro di Charles Petzold? (Teoricamente)

+0

Forse non avrei dovuto postare questo in un fine settimana. Non molti punti di vista – NoMoreZealots

+2

Non si chiama Charles Petzold? –

+0

Solo una nota che sto scoprendo che alcune delle nuove API possono essere chiamate da C++ ma non da C, almeno non senza problemi. 'SHGetKnownFolderPath()' è quello con cui sto lottando al momento. – hippietrail

risposta

14

Ci sono naturalmente molte nuove API di cui dovresti essere a conoscenza per assicurarti di avere gli strumenti necessari. Oltre a ciò, ci sono alcuni cambiamenti da notare.

Philosophical cambia
parti grandi delle vecchie API Win32 API incentrati su C-stile in cui manici sono stati passati in giro. Al giorno d'oggi, molte delle nuove API sviluppate sono basate su COM, quindi sarebbe utile fare un buon lavoro su COM e ATL.

Si potrebbe anche voler prendere nota del nuovo stile API se si scrivono le proprie librerie, che è un po 'più coerente ed evita cose come la notazione ungherese.

Replacements
In generale, non presumere che i metodi si sapeva circa 10 anni fa sono ancora state-of-the-art; esistono ancora, quindi non ti verrà detto necessariamente che stai sbagliando. Controlla MSDN per vedere se ti fa riferimento a qualcosa di meglio, e usa l'ultimo SDK in modo da ricevere avvisi di deprecazione per alcune funzioni. In particolare, assicurati che le funzioni di stringa che stai utilizzando siano sicure.

In particolare, un'API di "sostituzione" è Direct 2d, che è un'API in stile DirectX per le interfacce utente. Se stai scrivendo il codice grafico per Windows 7, dovresti considerare Direct2d su GDI, che ha un modello di programmazione compatibile, ma molto diverso da GDI. Direct 2d può essere riportato su Vista.

Inoltre, anziché utilizzare il menu in stile win32, è consigliabile utilizzare la barra multifunzione, che sarà disponibile sia per Vista che per Win7.

Se si utilizza la libreria di controlli comuni, assicurarsi di utilizzare v6, non il valore predefinito di v5.

Infine, assicurati di non chiamare inutilmente le cose che richiedono i privilegi di amministratore, poiché ciò richiederà UAC.

Tutto quello a cui riesco a pensare per ora.

+1

+1 Mi è piaciuto molto l'occhio per i dettagli e l'organizzazione. –

+1

Immagino che raccomandino l'uso dei Nastri, ma non lo richiedono giusto? Non mi interessa davvero il "Look and Feel" del nuovo ufficio. Non mi sembra un'interfaccia pulita per me. – NoMoreZealots

+0

Il GDI era una libreria SLOW, è bello vederlo essere sostituito. Era quasi come se avessero provato a far rallentare il GDI. Ci è voluto l'OSX di Apple che diceva che usava l'eccellenza hardware prima che Microsoft decidesse di risolvere il proprio software slow freaking. – NoMoreZealots

1

Niente di speciale. La vecchia roba funziona praticamente come ha fatto. Ci sono alcune nuove API, ma niente sconvolgente (e seguendo le vecchie convenzioni Win32). Quindi tutto ciò che conosci da Vista è ancora vero per Win7.

Ora ci sono alcune nuove linee guida riguardanti l'esperienza dell'utente (touch screen, librerie (roba di esperienza utente, non materiale programmatore)), ma lo stile API è lo stesso.

3

There are new API's for each.

C'è ulteriori conoscenze, anche se non può essere richiesto, è necessario avere familiarità con i 64-bit e lo sviluppo applicazioni multi-threaded per citarne alcuni. I costrutti di livello superiore come Direct2D, .NET ecc. Ecc. Sono quelli che richiedono la regolazione in conoscenza, non necessariamente le API di livello inferiore.

+1

Per quanto riguarda l'elenco di Windows 7 nel collegamento, non considerarlo completo. Ad esempio, non menziona alcuna interfaccia COM, quindi è un sottoinsieme piuttosto banale di ciò che è effettivamente nuovo. –

+0

Esiste una risorsa più divinatoria? – NoMoreZealots

2

Avete la scelta: tradizionale C/C++ o utilizzare i più recenti linguaggi .Net (C#/VB.net/Python.net e altro). Per quest'ultimo, conoscere la struttura è più importante dell'implementazione. Sei isolato (in generale) da puntatori, threading, buffer e gestione della memoria e, a parte alcune differenze di sintassi, una volta che conosci il framework, è portatile tra le lingue (ad esempio, puoi facilmente prendere in considerazione la programmazione VB.net se sei un C# come la maggior parte di ciò che faranno le tue app è chiamare parti del framework). È possibile creare una classe in C#, utilizzarla in un programma VB.net e fare riferimento alla stessa classe da un cmdlet di PowerShell per esempio.

Le interfacce C vecchio stile sono ancora disponibili per Win32 ma, a meno che non si abbia una specifica necessità di usarle (codice legacy, Direct X, driver di dispositivo per esempio) guarderei le cose più nuove. Per quanto riguarda cose come WPF, non c'è nemmeno una via diretta attraverso il codice non gestito - devi passare attraverso tutti i tipi di brutti cerchi di interopzioni.

1

Integrity levels sono anche una buona cosa da imparare. A seconda della natura della tua applicazione, se tenta di fare qualcosa che coinvolge altri processi che sono in esecuzione sul sistema operativo, è importante saperlo. Questa tecnologia impedisce ai processi a un livello di integrità inferiore di interagire con i processi in esecuzione a un livello di integrità più elevato. Ciò include la messaggistica, i ganci, l'iniezione di DLL, le maniglie di apertura e molte altre tecniche.