Question

Je pense apprendre COM.But j'entendu dire que Microsoft a lancé .NET comme une alternative à COM. Donc, il vaut la peine d'apprendre COM? en fait je commencé à apprendre COM pour pilote de périphérique UMDF. Y at-il autre moyen de travailler sur UMDF sauf COM?

Était-ce utile?

La solution

UMDF est un cadre pour développer des pilotes de périphériques en mode utilisateur. Je pense une exigence clé pour un pilote de périphérique est: chargement rapide. Je ne veux pas retarder tout mon temps de démarrage parce que j'ai un pilote de périphérique funky qui doit charger et JIT le framework .NET (preJITed mais néanmoins).

Bien sûr, vous pouvez développer trop com bibliothèques pléthorique mais en étant compétent, vous pouvez l'éviter. Vous ne pouvez pas éviter l'exécution .NET.

Donc, même si UMDF permis pour le développement .NET I à ce stade de temps ne veulent pas que les pilotes de périphériques écrit en .NET.

Ne vous méprenez pas. J'adore .NET. Je ne pense pas que les mélanges bien avec les pilotes de périphériques, même si nous parlons de pilotes usermode.

Lorsque l'on regarde COM je pense qu'il aide à comprendre pourquoi il a été développé: fournir intéropabilité entre les composants développés dans des environnements différents. C'était de retour dans les années 80. Maintenant, les gens ne se plaint de COM au fil des ans, mais il est en fait très bien réussi à cela. Il y avait quelques erreurs dans le modèle de déploiement de COM (par exemple la dépendance de registre) et d'autres choix de conception intéressants qui ont fait les développeurs se gratter la tête. Cependant, le noyau de COM (c.-à-IUnknown) est encore le son de l'OMI.

Autres conseils

COM est vieux, ennuyeux et frustrant. Je ne pense pas que quiconque ait jamais aimé travailler avec COM. Donc, en général, je recommande contre l'apprentissage, sauf si vous avez une raison vraiment convaincante. S'il y a une bibliothèque COM là que vous devez utiliser, je place apprendre à l'utiliser par COM Interop, qui vous permet de travailler avec COM de .NET.

Pour être clair, .NET était très destiné à être un remplacement pour COM. Et ça a fonctionné bien, ça a été un grand succès. Mais COM est partout dans Windows, vous ne pouvez pas secouer un bâton à un programme typique et ne fonctionne pas dans un endroit COM. Cela commence par le premier morceau de code dans un programme GUI .NET, [STAThread].

Il y a beaucoup et beaucoup de choses dans Windows qui n'a pas encore obtenu l'emballage .NET convivial. C'est pas toujours nécessaire, le CLR a un excellent support pour COM Interop. Bien visible de la boîte de dialogue Ajouter une référence, l'onglet COM est rempli de goodies. Mais ce que vous voyez dans cette liste sont des éléments qui ont été créés spécifiquement pour être facile à utiliser de any environnement d'exécution. Ils mettent en œuvre un sous-ensemble de COM appelé "OLE Automation".

L'automatisation est un sous-ensemble très restreint, cela fonctionne si bien parce que ce que vous pouvez réellement faire est limité. Il y a cependant GOBS de code qui ne correspond pas à ce sous-ensemble. Le genre pour lequel vous ne trouvez pas une bibliothèque de type. Sans la bibliothèque de type que vous êtes foutus dans .NET. La composante la plus visible de cette question est la coquille. Windows Explorer. Rédaction d'une extension du shell dans le code managé est dur .

Le problème est que les déclarations d'interface COM ont été initialement conçus pour bien fonctionner sur un compilateur qui implémente héritage multiple. C ++ spécifiquement. Une déclaration d'interface .NET ne sont pas bien adaptées à une interface COM, si cette interface COM est dérivée d'une autre interface COM. Le CLR génère le mauvais v-table. Ceci est abordé dans cette article de magazine MSDN , bien que la conclusion de l'auteur est tout à fait tort.

peuvent écrire des déclarations d'interface COM dans un langage .NET et les mettre en œuvre. Il est juste que vous obtenez pas aide du tout du SDK. Et que vous aurez besoin de connaître assez bien COM pour les obtenir droit.

UMDF correspond à ce modèle aussi, ses interfaces sont dérivées de IUnknown. Aucune bibliothèque de types. Non géré wrapper que je connaisse. Vous peut écrire votre code en C #, mais vous devrez écrire toutes les déclarations d'interface vous-même. De façon réaliste, que C ++ applique ici.

Oui, vous aurez besoin d'apprendre COM.

COM a été utile, car il vous a permis de construire une langue API indépendante qui pourrait être consommée à partir de plusieurs langues. Il est maintenant utilisé .net pour à peu près dans le but de sampe, bien qu'il soit moins accessible. Si vous programmez .net, beaucoup « juste travail » de l'API COM, bien qu'il soit bon d'avoir une certaine compréhension de base de la façon dont fonctionne COM (telle que COM utilise refcounting pour la gestion de la mémoire, alors que .net utilise la collecte des ordures).

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top