2010-08-14 21 views
5

Estoy pensando en aprender COM. Pero escuché que Microsoft lanzó .NET como alternativa a COM. ¿Vale la pena aprender COM? realmente comencé a aprender COM para el controlador de dispositivo UMDF. ¿Hay alguna manera alternativa de trabajar en UMDF excepto COM?¿Vale la pena aprender COM?

+0

Relacionados http://stackoverflow.com/questions/2280639/is-net-all-com-underneath –

+6

Sí, apúntelo. Es el sustento de casi todo en Windows. Si lo admiten o no. Además, serás ese simpático amigo de COM en la oficina que se queda con todas las chicas. :-) – JustBoo

Respuesta

8

UMDF es un marco para desarrollar controladores de dispositivo en modo de usuario. Creo que un requisito clave para un controlador de dispositivo es: cargar rápido. No quiero retrasar mis tiempos de inicio simplemente porque tengo un controlador de dispositivo funky que tiene que cargar y JIT el .NET framework (preJITed pero no obstante).

Claro que también puedes desarrollar librerías de combo hinchadas, pero siendo competente puedes evitarlo. No puede evitar el tiempo de ejecución de .NET.

Así que incluso si UMDF permitiera el desarrollo de .NET, en este momento no querría que los controladores de dispositivo se escriban en .NET.

No me malinterprete. Amo .NET. Simplemente no creo que se mezcle tan bien con los controladores de dispositivo, incluso si estamos hablando de controladores de modo de usuario.

Al mirar COM, creo que ayuda a comprender por qué fue desarrollado: para proporcionar interoperabilidad entre los componentes desarrollados en diferentes entornos. Esto fue en los años 80. Ahora la gente se ha quejado de COM a lo largo de los años, pero en realidad es muy exitoso. Hubo algunos errores en el modelo de implementación de COM (es decir, la dependencia del registro) y otras opciones de diseño interesantes que han hecho que los desarrolladores se rasquen la cabeza. Sin embargo, el núcleo de COM (es decir, IUnknown) sigue siendo sólido IMO.

+0

Pero escuché que .NET reemplazará a COM en unos pocos años. ¿Vale la pena comenzar a aprender COM? – Neo

+0

No veo que eso suceda. Romperá muchas aplicaciones y el costo de arreglarlo será enorme (¿1 millón de años hombre ?, tal vez incluso más). Yo y muchos otros demandaríamos por eso, así que agreguemos un costo legal a eso. No puedo decir si vale la pena aprender COM, pero creo que COM estará con nosotros hasta que se elimine la plataforma de Windows NT. Con un buen tutorial, el COM de núcleo es bastante fácil. Toma 1 día para comprender los fundamentos. – FuleSnabel

+0

Por favor, ¿puede decirme dónde puedo obtener buenos recursos para COM (ya sea libro o sitio web). – Neo

11

COM es viejo, tedioso y frustrante. No creo que nadie haya disfrutado trabajando con COM. Por lo tanto, en general, recomendaría no aprenderlo a menos que tenga una razón realmente convincente. Si existe una biblioteca COM que deba usar, en su lugar, aprenderé a usarla a través de la interoperabilidad COM, que le permite trabajar con COM desde .NET.

+0

Pero, ¿y si quiero trabajar en el controlador de dispositivo UMDF? – Neo

+0

No soy un experto en UMDF (ni mucho menos), pero parece que estar familiarizado con COM ayudará a abordar un proyecto de UMDF. –

+0

En serio, trabajé con COM para + - 7 años y la mayoría del tiempo lo disfruté. Además, dado que Windows depende en gran medida de COM, si va a extender Windows, es muy probable que necesite utilizar COM. – Vagaus

3

COM fue útil porque le permitía crear una API independiente del idioma que se podía consumir desde varios idiomas. Ahora, .net se utiliza para el propósito de sampe, aunque es menos accesible. Si programa .net, muchas "API COM" simplemente funcionan ", aunque es bueno obtener una comprensión básica de cómo funciona COM (por ejemplo, que COM utiliza refcounting para la administración de memoria, mientras que .NET usa la recolección de basura).

10

Para ser claros, .NET estaba destinado a ser un sustituto de COM. Y funcionó bien, ha sido muy exitoso. Pero COM es en todas partes en Windows, no puede sacudirse un palo en un programa típico y no ejecutar COM en alguna parte. Eso comienza con el primer bit de código en cualquier programa GUI .NET, [STAThread].

Hay muchas cosas en Windows que todavía no han recibido el simpático .NET wrapper. Eso no siempre es necesario, el CLR tiene un excelente soporte para la interoperabilidad COM. Muy visible desde el cuadro de diálogo Agregar referencia, la pestaña COM está llena de regalos. Pero lo que ve en esa lista son componentes que fueron diseñados específicamente para ser fáciles de usar desde a cualquier entorno de tiempo de ejecución. Implementan un subconjunto de COM llamado "Automatización OLE".

La automatización es un subconjunto muy restringido, funciona muy bien porque lo que realmente se puede hacer es limitado. Sin embargo, hay muchos códigos que no se ajustan a ese subconjunto. El tipo para el que no puede encontrar una biblioteca de tipos. Sin la biblioteca de tipos, estás jodido en .NET. El componente más visible con ese problema es el shell. Explorador de Windows. Escribir una extensión de shell en código administrado es difícil.

El problema es que las declaraciones de interfaz COM se diseñaron originalmente para funcionar bien en un compilador que implementa herencia múltiple. C++ específicamente. Una declaración de interfaz .NET no se correlaciona bien con una interfaz COM si esa interfaz COM se derivó de otra interfaz COM. CLR genera la tabla v incorrecta. Esto se menciona en este MSDN magazine article, aunque la conclusión del autor es bastante incorrecta.

Usted puede escribir declaraciones de interfaz COM en un idioma .NET e implementarlas. Es solo que obtienes no ayuda del SDK. Y que necesitará saber COM bastante bien para hacerlas bien.

UMDF también se ajusta a este modelo, sus interfaces se derivan de IUnknown. Sin tipo de biblioteca No hay envoltorio administrado que yo sepa. Usted podría escribir su código en C#, pero usted tendrá que escribir todas las declaraciones de la interfaz usted mismo. De manera realista, solo C++ se aplica aquí.

Sí, necesitará aprender COM.

+0

¿Conoces algún buen libro para COM? ¿Algún sitio web para tutoriales? – Neo

+0

El hilo está aquí: http://stackoverflow.com/questions/399566/what-is-the-best-book-to-learn-com –