2009-02-03 16 views
27

Come un grande fan dei libri di Charles Petzold Codice e L'Annotated Turing mi sono imbattuto il suo libro Programmazione Windows che insegna programmazione Win32 in C. Sono uno studente matricola di informatica che ha imparato C prima, ma io uso C# e .NET per la programmazione Windows ora, quindi mi chiedevo se Win32 è ancora rilevante per i programmi Windows professionali. Ne varrebbe la pena, come studente che vuole programmare applicazioni Windows, imparare l'API Win32 alla profondità che il libro copre?Quanto è rilevante la programmazione Win32 per i professionisti moderni?

+0

Duplicato di questa domanda: http://stackoverflow.com/questions/5507/does-it-still-make-sense-to-learn-low-level- programmazione winapi – MarkJ

risposta

30

in realtà dipende i tipi di applicazioni che desideri sviluppare. Per la maggior parte dei casi in questi giorni, C# e .NET sono completamente adatti. Tuttavia, ci sono alcuni tipi di applicazioni che richiedono meno dipendenze possibili (le estensioni della shell vengono in mente) che non sono pratici da fare come applicazioni .NET. Per quelli che ti servono Win32.

Come sempre, conviene avere almeno una conoscenza di base di Win32 anche se si utilizza .NET per la maggior parte del proprio lavoro.

12

A mio parere, no. L'ho imparato molto tempo fa, quindi non dovresti farlo!

Penso che sia fantastico che tu abbia imparato C in primo luogo, e continuerei a scrivere programmi C di tanto in tanto, ma non vedo perché l'API win32 possa essere utile a scavare. Onestamente, è stato un gran casino.

+3

Bene, ci sono sicuramente alcune utili funzioni di livello inferiore che possono essere chiamate solo da wind32 api, anche in managed C# – mmcdole

+5

Sì, è un gran casino. E questo è esattamente il motivo per cui è utile sapere come aggirarlo ... – Treb

+2

5 anni fa ho speso il 100% del tempo in Win32. 0% ora. Non credo che saperlo mi aiuti giorno per giorno, rispetto ad altre cose che ho bisogno di imparare. È utile come cronologia, come gli opcode Z80 e 6502 nella mia testa. – Nosredna

0

Alcune cose non può essere fatto senza le chiamate API vittoria, ma con ogni versione di .NET quelle cose diventano sempre meno in modo che nessuno non vorrei imparare l'API vittoria se ho in cui si ..

29

Sono completamente d'accordo con ciò che Joel Spolsky scrive in uno dei suoi tanti fantastici articles. Penso che sia fondamentale conoscere gli strati inferiori della macchina non solo per essere in grado di scrivere codice di qualità, ma per essere in grado di risolvere i problemi che inevitabilmente si presenteranno.

Quindi, SÌ, è importante conoscere almeno le basi dell'API WIN32, forse non in profondità, ma almeno sapere che è lì, alla base di tutto ciò che codificherete.

+0

Le API di livello superiore sono mature. "almeno sapere che è lì" è probabilmente sufficiente. –

2

A meno che non sia necessaria una funzionalità non presente in .NET Framework (come ottenere informazioni dettagliate sui driver di stampa), no. Questo è circa il 99% (ovviamente, un valore arbitrario che ho appena inventato) di quello che farai.

Anche se si stesse utilizzando Win32 e non .NET, è davvero necessario conoscere la stessa profondità del libro? Naviga attraverso le sezioni, scopri che se incontri qualche problema in futuro sai dove cercarlo. Quindi fermati. Vai in profondità quando ne hai bisogno o prendi il tempo libero.

0

Devi sapere che esiste, dal momento che la maggior parte delle funzioni native di un linguaggio gestito più "avanzato" finisce per chiamarle.

più esso può essere incapsulato in linguaggi di script come Autoit con DllCall

4

io non credo "imparare Win32 API" è realistico per chiunque. Le API (sì, ce ne sono più di una) sono enormi e difficilmente avrete bisogno di conoscerle tutte in dettaglio. Consiglierei di leggere alcune nozioni di base (ad esempio creazione di finestre, messaggistica di finestre, procedure di finestre, forse alcuni GDI, ecc.) E utilizzare MSDN per cercare il resto ogni volta che ne avete bisogno.

+0

Sono d'accordo. Persino le persone che hanno scritto app complete per win32 non conoscevano il tutto. Penso di aver provato tutto a Petzold quando. Ma ricordo solo le parti che ho usato più di una volta. – Nosredna

4

Apprendete sicuramente le basi come menzionato da AlexDrenea. NET ti protegge da molte chiamate API Win32. L'API di Win32 è così enorme che sei destinato a imbatterti in situazioni in cui .NET non lo ha avvolto per te.

una vita reale situazione comune sort arrows on ListViewColumns

3

Come per il commento di Greg, è in una certa misura dipendente dominio. Faccio molta programmazione Windows CE/mobile, dove .NET è troppo hoggish per molti dispositivi e altri framework come MFC non sono completamente implementati. In questo contesto, gran parte di Win32 è ancora molto rilevante.

Detto questo, non andrei a imparare tutto in anticipo, vorrei semplicemente passare attraverso le basi e scavare il resto come e quando ne avevo bisogno. La documentazione e gli esempi disponibili sono sufficienti per questo approccio, così come l'aiuto online disponibile da comunità come questa.

12

È molto importante se si scrive C# su Windows. Non tutte le funzionalità di Win32 sono state esposte tramite le librerie .Net. Un esempio concreto di ciò è la tecnica del messaggio WM_SETREDRAW che descrivo qui: WM_SETREDRAW. È anche necessario in altri momenti per problemi di messa a fuoco.

Inoltre, capire come Win32 e Windows lavoro vi darà una migliore comprensione di vari aspetti del C#/Net come ad esempio:.

  • Cosa Control.Invoke() effettivamente fare?
  • Qual è la differenza tra Control.BeginInvoke e Control.Invoke?
  • Ciò causa effettivamente l'attivazione degli eventi del mio controllo, ad es. OnClick ecc. E come posso eseguirne il debug.

Detto questo, WPF cambia tutto questo e se si sta scrivendo solo .Net 3/3.5 codice quindi il mio argomento perde un po 'la sua rilevanza.

1

Penso che sia già stata fornita una risposta, ma se si esegue lo sviluppo di .NET 2.0 o qualsiasi winform in .NET, ci si imbatterà in molti problemi con il modo in cui alcune parti del framework includono Win32 e MFC e voi Dovrò scavare in quello per ottenere effettivamente che le cose funzionino come previsto.

+0

.NET (indipendentemente dalla versione) non avvolge alcun codice MFC. – IInspectable

0

Questo è stato discusso molte volte nell'albo professionale API Win32 Newsgroup ( notizie: //comp.os.ms-windows.programmer.win32)

(dai più grandi guru e autore best-seller (Petzold, Russinovich, ecc.) Nel mondo ...)

+5

Quindi, qual è stata la conclusione? – CDR

2

Se stai cercando di risolvere i problemi aziendali, ci sono strumenti migliori là fuori di C per programmare i sistemi Win32. Clarion. Delphi. E altri non ho dubbi.

ma credo che per imparare come funzionano le cose sei al posto buono con C.

8

Penso che sia importante imparare le basi. Se hai appreso quanto basta per visualizzare una finestra con alcuni campi, alcuni pulsanti e un menu. Forse disegnare qualcosa in una finestra separata. Ti aiuterebbe a capire i fondamenti di come Windows funziona davvero. Credo che capire il ciclo dei messaggi e la consapevolezza che quasi tutto ciò che vedi è una finestra sono cose fondamentali che tutti dovrebbero sapere. I miei occhi erano davvero aperti la prima volta che mi sono reso conto che un pulsante era la propria finestra. Quindi ti aiuta a capire che le caratteristiche delle cose possono essere attivate e disattivate inviando questi messaggi di Windows. Subclassing windows ti consente di accedere a funzionalità non esposte a cose come .NET o VB Classic e miglioriamo le funzionalità della finestra.

1

Sto ancora guadagnando parte del mio denaro usandolo. Abbiamo un IDE C che si basa su WinAPI.È ora in giro per 15 anni o giù di lì, e ancora in esecuzione ;-). Il download completo di esso è di circa 5 MB in quanto non si ottiene nulla nel mondo .NET. Quindi per noi è ancora una cosa preziosa ...

Problemi correlati