2009-07-19 15 views
8

¿Hay alguna diferencia fundamental en WinAPI/Win32? ¿Se requiere algún conocimiento adicional para aprovechar las nuevas características del sistema operativo?Windows API para VISTA, 7 y más allá

¿Hay algún error que alguien que haya codificado aplicaciones Win32 en el pasado podría caer?

No estoy hablando de Silverlight, es una bola de cera completamente diferente. (Todavía no tengo el VS que lo admite en el trabajo).

Editar: Drew tiene una respuesta bastante buena hasta ahora, pero ¿qué es lo que debe saber un programador? es decir, ¿qué debería estar en un apéndice del libro de Charles Petzold? (En teoría)

+0

Tal vez no debería haber publicado esto en un fin de semana. No muchas vistas. – NoMoreZealots

+2

¿No se llama Charles Petzold? –

+0

Solo una nota que encuentro que algunas de las nuevas API se pueden llamar desde C++ pero no desde C, al menos no sin algunas molestias. 'SHGetKnownFolderPath()' es con el que estoy luchando en este momento. – hippietrail

Respuesta

14

Por supuesto, hay muchas API nuevas que debe tener en cuenta para asegurarse de tener las herramientas que necesita. Más allá de eso, hay algunos cambios para notar.

Philosophical cambia
Gran parte de las antiguas API Win32 se centraron en las API de tipo C, donde se aprobaron las manijas alrededor. Hoy en día, muchas de las nuevas API que se están desarrollando están basadas en COM, por lo que valdrá la pena desarrollarse en COM y ATL.

Es posible que también desee tomar nota del nuevo estilo API si está escribiendo sus propias bibliotecas, que es un poco más consistente y evita cosas como la notación húngara.

Reemplazos
En general, no asuma que los métodos que conociste hace unos 10 años siguen siendo el estado de la técnica; todos ellos todavía existen, por lo que no necesariamente se te dirá que lo estás haciendo mal. Verifique MSDN para ver si lo refiere a algo mejor, y use el último SDK para obtener advertencias de desactivación de algunas funciones. Especialmente, asegúrese de que las funciones de cadena que está utilizando sean seguras.

Específicamente, una API de 'reemplazo' es Direct 2d, que es una API de estilo DirectX para las IU. Si está escribiendo código de gráficos para Windows 7, debe considerar Direct2d sobre GDI, que tiene un modelo de programación que es compatible con, pero muy diferente a GDI. Direct 2d puede ser portado a Vista.

Además, en lugar de utilizar el menú estilo win32, considere usar la cinta de opciones, que estará disponible para Vista y Win7.

Si está utilizando la biblioteca de controles comunes, asegúrese de usar v6, no el valor predeterminado de v5.

Finalmente, asegúrese de que no está llamando innecesariamente a cosas que requieren privilegios de administrador, ya que eso provocará el UAC.

Todo lo que puedo pensar por ahora.

+1

+1 Me encantaron los detalles y la organización. –

+1

Imagino que recomiendan usar los Ribbons, pero no lo requieren, ¿verdad? Realmente no me importa el "Look and Feel" de la nueva oficina. No se siente como una interfaz limpia para mí. – NoMoreZealots

+0

El GDI era una biblioteca LENTA, es agradable ver que se reemplaza. Fue casi como si lo hubieran intentado hacer que el GDI fuera más lento. Tomó OSX de Apple diciendo que usó la excelencia del hardware antes de que Microsoft decidiera arreglar su propio software lento para volcar. – NoMoreZealots

1

Nada especial. Lo viejo funciona prácticamente como lo hizo. Hay algunas API nuevas, pero nada destructora (y siguiendo las antiguas convenciones de Win32). Así que todo lo que sabes de Vista sigue siendo cierto para Win7.

Ahora, hay algunas nuevas pautas con respecto a la experiencia del usuario (pantalla táctil, bibliotecas (cosas de experiencia del usuario, cosas no del programador)), pero el estilo de API es el mismo.

3

There are new API's for each.

Hay un conocimiento adicional, aunque puede no ser necesario, debe estar familiarizado con los 64 bits y desarrollo de aplicaciones multi-hilo para nombrar unos pocos. Las construcciones de nivel superior, como Direct2D, .NET, etc., son lo que requieren el ajuste en el conocimiento, no necesariamente las API de nivel inferior.

+1

En cuanto a la lista de Windows 7 en su enlace, no lo tome como completo. No menciona ninguna interfaz COM, por ejemplo, por lo que es un subconjunto bastante trivial de lo que es realmente nuevo. –

+0

¿Hay un recurso más divinativo? – NoMoreZealots

2

Tiene la opción: C/C++ tradicional o utilizar los nuevos lenguajes .Net framework (C#/VB.net/Python.net y más). Para este último, conocer el marco es más importante que la implementación. Está aislado (en general) de punteros, subprocesos, búferes y administración de memoria y, aparte de algunas diferencias en sintaxis, una vez que sabe que el marco es portátil entre idiomas (es decir, puede elegir fácilmente la programación de VB.net si está un chico C#, ya que la mayoría de lo que harán tus aplicaciones es llamar a partes del framework). Puede crear una clase en C#, usarla en un programa de VB.net y hacer referencia a la misma clase de un cmdlet de Powershell, por ejemplo.

Las interfaces C antiguas siguen siendo para Win32, pero a menos que tenga una necesidad específica de usarlas (código heredado, Direct X, controladores de dispositivo, por ejemplo) miraría las cosas más nuevas. En cuanto a cosas como WPF, ni siquiera hay una ruta directa a través de un código no administrado: tienes que saltar a través de todo tipo de feos aro de interoperabilidad.

1

Integrity levels son también una buena cosa para aprender. Dependiendo de la naturaleza de su aplicación, si intenta hacer algo que implique otros procesos que se ejecutan en el sistema operativo, es importante saberlo. Esta tecnología evita que los procesos en un nivel de integridad inferior interactúen con procesos que se ejecutan a un nivel de integridad más alto. Esto incluye mensajes, ganchos, inyección DLL, identificadores de apertura y muchas otras técnicas.

Cuestiones relacionadas