2009-02-03 11 views
27

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?

+0

Duplicado de esta pregunta: http://stackoverflow.com/questions/5507/does-it-still-make-sense-to-learn-low-level- winapi-programming – MarkJ

Respuesta

30

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.

12

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.

+3

Bueno, definitivamente hay algunas funciones útiles de nivel inferior que solo se pueden invocar desde la aplicación wind32, incluso en C# – mmcdole

+5

administrado Sí, es un gran desastre. Y es exactamente por eso que es útil saber cómo hacerlo ... – Treb

+2

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

0

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 ..

29

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á.

+0

Las API de nivel superior son maduras. "al menos sé que está allí" es probablemente suficiente. –

2

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.

0

Tiene que saber que existe, ya que la mayoría de las funciones nativas de un lenguaje gestionado más "avanzado" terminan llamándolos.

Además de que puede ser encapsulada en lenguajes de script como Autoit con DllCall

4

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.

+0

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

4

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

3

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.

12

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.

1

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.

+0

.NET (independientemente de la versión) no ajusta ningún código MFC. – IInspectable

0

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 ...)

+5

Entonces, ¿cuál fue la conclusión? – CDR

2

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.

8

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.

1

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 ...

Cuestiones relacionadas