Como un gran fan de los libros de Charles Petzold Código y El anotada Turing me encontré con su libro Windows de programación que enseña programación de Win32 en C. Soy un estudiante de primer año de la informática que aprendió C en primer lugar, pero yo uso C# y .NET para la programación de Windows ahora, así que me preguntaba si Win32 todavía es relevante para los programas profesionales de Windows. ¿Valdría la pena para mí, como estudiante que desea programar aplicaciones de Windows, aprender la API de Win32 a la profundidad que cubre el libro?¿Qué tan relevante es la programación de Win32 para los profesionales modernos?
Respuesta
Realmente depende de los tipos de aplicaciones que desea desarrollar Para la mayoría de los fines de estos días, C# y .NET son completamente adecuados. Sin embargo, hay ciertos tipos de aplicaciones que necesitan la menor cantidad posible de dependencias (se les vienen a la mente las extensiones de shell) que no son prácticas para hacer como aplicaciones .NET. Para aquellos que necesitaría Win32.
Como siempre, vale la pena tener al menos una comprensión básica de Win32, incluso si está utilizando .NET para la mayoría de su trabajo.
En mi opinión, no. Lo aprendí hace mucho tiempo, ¡así que no tendrías que hacerlo!
Creo que es genial que hayas aprendido C primero, y yo seguiría escribiendo C programas de vez en cuando, pero no veo por qué la API win32 sería útil para profundizar. Honestamente, fue un gran desastre.
Bueno, definitivamente hay algunas funciones útiles de nivel inferior que solo se pueden invocar desde la aplicación wind32, incluso en C# – mmcdole
administrado Sí, es un gran desastre. Y es exactamente por eso que es útil saber cómo hacerlo ... – Treb
Hace 5 años gasté el 100% del tiempo en win32. 0% ahora. No creo que saberlo me ayude día a día, en comparación con otras cosas que necesito aprender. Es útil como historia, como los códigos de operación Z80 y 6502 en mi cabeza. – Nosredna
Algunas cosas no se puede hacer sin llamadas de API victoria pero con cada versión de .NET esas cosas se vuelven cada vez menos por lo que no no me gustaría aprender la API para todos si i donde ..
Estoy totalmente de acuerdo con lo que Joel Spolsky escribe en uno de sus muchos grandes articles. Creo que es crucial conocer las capas inferiores de la máquina no solo para poder escribir código de calidad sino para poder resolver problemas que inevitablemente aparecerán.
Por lo tanto, SÍ, es importante conocer al menos los principios básicos de WIN32 API, tal vez no en profundidad, pero al menos para saber que está allí, en la base de todo lo que codificará.
Las API de nivel superior son maduras. "al menos sé que está allí" es probablemente suficiente. –
A menos que necesite alguna funcionalidad que no esté en .NET Framework (como obtener información detallada sobre los controladores de impresora), no. Eso es aproximadamente el 99% (por supuesto, un valor arbitrario que acabo de inventar) de lo que harás.
Incluso si estuviera usando Win32 y no .NET, ¿realmente hay una necesidad de aprender la misma profundidad que el libro? Navegue a través de las secciones, sepa que si encuentra algún problema en el futuro, sabrá dónde buscarlo. Luego se detiene. Vaya en profundidad cuando lo necesite o tenga tiempo libre.
Yo no creo realmente que "aprender Win32 API" es realista para cualquier persona. Las API (sí, hay más de una) son enormes, y casi nunca necesitará conocerlas en detalle. Recomiendo leer algunos conceptos básicos (por ejemplo, creación de ventanas, mensajes de ventanas, procedimientos de ventanas, tal vez algunos GDI, etc.) y usar MSDN para buscar el resto cuando lo necesite.
Estoy de acuerdo. Incluso las personas que escribieron aplicaciones completas de win32 no sabían todo. Creo que intenté todo en Petzold hace mucho tiempo. Pero solo recuerdo las partes que usé más de una vez. – Nosredna
Definitivamente aprende los conceptos básicos como menciona AlexDrenea. Mientras que .NET lo protege de una gran cantidad de llamadas API de Win32. Win32 API es tan enorme que seguramente se encontrará con situaciones en las que .NET no se ha adaptado para usted.
Una vida real situación común sort arrows on ListViewColumns
De acuerdo con el comentario de Greg, es en cierta medida depende de dominio. Hago mucha programación de Windows CE/mobile, donde .NET es demasiado para muchos dispositivos y otros frameworks como MFC no están completamente implementados. En este contexto, gran parte de Win32 sigue siendo muy relevante.
Dicho esto, no iría aprendiendo todo por adelantado, simplemente iría a lo básico, y buscaría el resto cuando lo necesitara. La documentación y los ejemplos que existen son lo suficientemente buenos para este enfoque, al igual que la ayuda en línea disponible en comunidades como esta.
Es muy relevante si está escribiendo C# en Windows. No todas las características del Win32 han sido expuestas a través de las bibliotecas .Net. Un ejemplo concreto de esto es la técnica de mensaje WM_SETREDRAW que describo aquí: WM_SETREDRAW. También es necesario en otros momentos para problemas de enfoque de control.
Además, la comprensión de cómo Win32 y Windows trabajo le dará una mejor comprensión de los diversos aspectos de C#/Net, tales como:.
- ¿Qué Control.Invoke() realmente?
- ¿Cuál es la diferencia entre Control.BeginInvoke y Control.Invoke?
- Lo que realmente hace que se activen los eventos de mi control, p. OnClick, etc. y cómo puedo depurar eso.
Dicho esto, WPF cambia todo esto y si solo está escribiendo el código .Net 3/3.5, entonces mi argumento pierde algo de su relevancia.
Creo que ya ha sido respondida, pero si usted hace un desarrollo .NET 2.0 o cualquier cosa que se forme en .NET, seguramente tendrá muchos problemas con la forma en que algunas partes del framework están envolviendo win32 y mfc y usted Necesitaremos profundizar en eso para lograr que las cosas funcionen según lo previsto.
.NET (independientemente de la versión) no ajusta ningún código MFC. – IInspectable
esto se ha discutido muchas veces en Win32 API Profesional de grupos de noticias ( noticia: //comp.os.ms-windows.programmer.win32)
(por los más grandes gurús y los más vendidos autores (Petzold, Russinovich, etc.) en el mundo ...)
Entonces, ¿cuál fue la conclusión? – CDR
Si está tratando de resolver problemas de negocios, entonces hay mejores herramientas que C para programar sistemas Win32. Clarín. Delphi. Y otros no tengo dudas.
Pero supongo que para aprender cómo funcionan las cosas estás en una buena posición con C.
Creo que es importante aprender los conceptos básicos. Si aprendió lo suficiente para mostrar una ventana con algunos campos, algunos botones y un menú. Tal vez dibujar algo en una ventana separada. Te ayudaría a aprender los fundamentos de cómo funciona realmente Windows. Creo que comprender el ciclo de mensajes y la comprensión de que casi todo lo que ves es una ventana son cosas fundamentales que todos deberían saber. Mis ojos realmente se abrieron la primera vez que me di cuenta de que un botón era su propia ventana. Luego, le ayuda a comprender que las características de las cosas se pueden activar y desactivar enviando estos mensajes de Windows. Subclassing windows le permite acceder a funciones que no están expuestas a usted en elementos como .NET o VB Classic y le permite mejorar la funcionalidad de la ventana.
Todavía estoy ganando parte de mi dinero utilizándolo. Tenemos un C IDE que se basa en el WinAPI.Ahora tiene alrededor de 15 años y sigue funcionando ;-). La descarga completa es de alrededor de 5 MB por lo que no obtienes nada en el mundo .NET. Entonces para nosotros sigue siendo algo valioso ...
- 1. ¿Qué tan popular es la programación de pares?
- 2. ¿Es "regex" en los lenguajes de programación modernos realmente "gramática sensible al contexto"?
- 3. modernos C++ juego Ejemplos de programación
- 4. Win32 Programación de subprocesos
- 5. Win32 ¿Qué tan grande puede ser el recurso personalizado?
- 6. Sobrecarga de recursión: ¿qué tan serio es?
- 7. ¿Por qué las bases de códigos para navegadores web modernos son tan grandes?
- 8. ¿Qué tan seguro para los hilos es V4L2?
- 9. ¿El orden de la etiqueta es relevante para XML válido?
- 10. ¿Algún tutorial para la programación de Win32 SDK?
- 11. ¿Por qué la paginación es tan cara a los recursos?
- 12. ¿Qué tan inexacto es setInexactRepeating() para AlarmManager?
- 13. ¿Qué tan maduro es SDL para iPhone?
- 14. Consejos y trucos profesionales
- 15. ¿Qué editores modernos compiten con emacs/vi?
- 16. ¿Qué tan grande es la sesión Meteor
- 17. ¿Para qué sirve la memorización y realmente es tan útil?
- 18. ¿Qué tan grande es el rol que juega la subjetividad en la programación?
- 19. ¿Qué es la programación lineal?
- 20. ¿Qué tan útil es Response.IsClientConnected?
- 21. ¿Qué tan confiable es HTTP_HOST?
- 22. ¿Qué tan seguro es PHP?
- 23. ¿Qué tan seguro es javax.crypto.Cipher?
- 24. ¿Qué tan rápido es LINQ?
- 25. ¿Qué tan similares son los lenguajes de bases de datos relacionales y la programación lógica?
- 26. ¿Qué tan seguro es el filtrado de la dirección IP?
- 27. Qué tan lento es Reflection
- 28. ¿Qué tan bueno es VTK?
- 29. ¿Qué tan confiable es HtmlUnitDriver?
- 30. ¿Qué tan confiable es current_kernel_time()?
Duplicado de esta pregunta: http://stackoverflow.com/questions/5507/does-it-still-make-sense-to-learn-low-level- winapi-programming – MarkJ