2009-07-19 7 views
8

Existe-t-il des différences fondamentales dans WinAPI/Win32? Existe-t-il des connaissances supplémentaires requises pour tirer parti des nouvelles fonctionnalités du système d'exploitation?API Windows pour VISTA, 7 & Beyond

Y a-t-il des pièges dans lesquels une personne ayant codé des applications Win32 dans le passé pourrait tomber? Je ne parle pas de Silverlight, c'est une boule de cire complètement différente. (Je n'ai pas encore le VS qui supporte cela au travail.)

Editer: Drew a une assez bonne réponse à ce jour, mais qu'est-ce qui est critique pour un programmeur? Par exemple, que devrait contenir une annexe au livre de Charles Petzold? (Théoriquement)

+0

Peut-être que je n'aurais pas dû poster ceci un week-end. Pas beaucoup de vues. – NoMoreZealots

+2

N'est-ce pas le nom de ce mec Charles Petzold? –

+0

Juste une note que je trouve certaines des nouvelles API peuvent être appelées à partir de C++ mais pas de C, du moins pas sans quelques tracas. 'SHGetKnownFolderPath()' est celui avec lequel je me bats en ce moment. – hippietrail

Répondre

14

Il y a bien sûr beaucoup de nouvelles API dont vous devez être conscient pour vous assurer que vous avez les outils dont vous avez besoin. Au-delà, il y a quelques changements à noter.

philosophique change
Une grande partie des anciennes API win32 axées sur les API de type C où les poignées ont été passé autour. De nos jours, la plupart des nouvelles API en cours de développement sont basées sur COM, de sorte qu'il serait utile d'améliorer COM et ATL. Vous pouvez également prendre note du nouveau style d'API si vous écrivez vos propres bibliothèques, ce qui est un peu plus cohérent et évite des choses comme la notation hongroise.

Remplacements
Généralement, ne pas tenir pour acquis que les méthodes que vous étiez au courant il y a 10 ans sont encore l'état de l'art; ils existent tous, donc on ne vous dira pas nécessairement que vous vous trompez. Vérifiez MSDN pour voir s'il vous renvoie vers quelque chose de mieux, et utilisez le dernier SDK pour obtenir des avertissements de dépréciation pour certaines fonctions. Surtout, assurez-vous que les fonctions de chaîne que vous utilisez sont sécurisées. Plus précisément, une API de 'remplacement' est Direct 2d, qui est une API de style DirectX pour les interfaces utilisateur. Si vous écrivez du code graphique pour Windows 7, vous devriez considérer Direct2d sur GDI, qui a un modèle de programmation compatible, mais très différent, de GDI. Direct 2d peut être redirigé vers Vista. En outre, au lieu d'utiliser le menu de style win32, pensez à utiliser le ruban, qui sera disponible pour Vista ainsi que pour Win7.

Si vous utilisez la bibliothèque de contrôles communs, veillez à utiliser la version 6, et non la valeur par défaut de la version 5.Enfin, assurez-vous de ne pas appeler inutilement des choses qui nécessitent des privilèges d'administrateur, car cela provoquera le contrôle de compte d'utilisateur.

Tout ce que je peux penser pour l'instant.

+1

+1 J'ai adoré votre attention pour les détails et l'organisation. –

+1

J'imagine qu'ils recommandent d'utiliser les rubans, mais ils ne l'exigent pas droit? Je ne me soucie vraiment pas de la "Look and Feel" du nouveau bureau. Cela ne me semble pas être une interface propre. – NoMoreZealots

+0

Le GDI était une bibliothèque SLOW, c'est bien de le voir remplacé. C'était presque comme s'ils essayaient de faire ralentir le GDI. Il a fallu l'OSX d'Apple disant qu'il utilisait l'excellence du matériel avant que Microsoft ne décide de réparer son propre logiciel de ralentissement. – NoMoreZealots

1

Rien de spécial. Les vieux trucs fonctionnent à peu près comme ça. Il existe de nouvelles API, mais rien de bouleversant (et suivant les anciennes conventions Win32). Donc, tout ce que vous savez de Vista est toujours vrai pour Win7.

Maintenant, il y a quelques nouvelles directives concernant l'expérience utilisateur (écran tactile, bibliothèques (expérience utilisateur, pas programmeur)), mais le style API est le même.

3

There are new API's for each.

Il y a des connaissances supplémentaires, mais il ne peut pas être nécessaire, vous devez être familier avec 64 bits et le développement d'applications multi-thread pour ne citer que quelques-uns. Les constructions de niveau supérieur telles que Direct2D, .NET, etc., sont ce qui nécessite l'ajustement des connaissances, pas nécessairement les API de niveau inférieur.

+1

En ce qui concerne la liste Windows 7 dans votre lien, ne le prenez pas aussi complet. Il ne mentionne aucune interface COM, par exemple, donc c'est un sous-ensemble plutôt trivial de ce qui est réellement nouveau. –

+0

Existe-t-il une ressource plus divinatoire? – NoMoreZealots

2

Vous avez le choix: traditionnel C/C++ ou utilisez les langages framework .Net les plus récents (C#/VB.net/Python.net et plus). Pour ce dernier, connaître le cadre est plus important que la mise en œuvre. Vous êtes isolé (en général) des pointeurs, des threads, des tampons et de la gestion de la mémoire et, mis à part quelques différences de syntaxe, vous pouvez facilement récupérer la programmation de VB.net si vous connaissez le framework. un gars C# comme la plupart de ce que vos applications vont faire est d'appeler des parties du cadre). Vous pouvez créer une classe en C#, l'utiliser dans un programme VB.net et référencer la même classe à partir d'une cmdlet Powershell par exemple. Les anciennes interfaces C sont toujours pour Win32, mais à moins que vous ayez un besoin spécifique de les utiliser (code hérité, Direct X, pilotes de périphériques par exemple), je regarderais les choses les plus récentes. En ce qui concerne les choses comme WPF, il n'y a même pas de route directe via le code non géré - vous devez sauter à travers toutes sortes de cerceaux d'interopérabilité laids.

1

Integrity levels sont également une bonne chose à apprendre. Selon la nature de votre application, si elle tente de faire quoi que ce soit impliquant d'autres processus qui s'exécutent sur le système d'exploitation, il est important de le savoir. Cette technologie empêche les processus à un niveau d'intégrité inférieur d'interagir avec des processus s'exécutant à un niveau d'intégrité supérieur. Cela inclut la messagerie, les crochets, l'injection de DLL, les poignées d'ouverture et bien d'autres techniques.

Questions connexes