Pregunta

Me refiero a aprender COM.But He oído que Microsoft lanzó .NET como una alternativa a COM. Así que vale la pena aprender COM? En realidad empecé COM aprendizaje de controlador de dispositivo UMDF. ¿Hay alguna forma alternativa de trabajo en UMDF excepto COM?

¿Fue útil?

Solución

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

Claro que se puede desarrollar bibliotecas com hinchados también, pero por ser competente puede evitarlo. No se puede evitar el tiempo de ejecución .NET.

Así que incluso si UMDF permitió el desarrollo .NET que en este punto del tiempo no querría controladores de dispositivo escrito en .NET.

No me malinterpreten. Me encanta .NET. Yo simplemente no creo que se mezcla muy bien con los controladores de dispositivos, incluso si estamos hablando acerca de los controladores modo de usuario.

Al mirar COM Creo que ayuda a entender por qué se desarrolló: proporcionar interopability entre los componentes desarrollados en diferentes entornos. Esto fue en los años 80. Ahora la gente se ha quejado de COM largo de los años, pero en realidad es muy exitoso en eso. 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 los desarrolladores se rascan la cabeza. Sin embargo, el núcleo de COM (es decir IUnknown) sigue siendo sólida OMI.

Otros consejos

COM es viejo, tedioso y frustrante. Yo no creo que nadie ha disfrutado trabajar con COM. Por lo general, me gustaría recomendar en contra de aprendizaje a menos que tenga una razón muy convincente. Si hay una biblioteca COM por ahí que usted necesita para su uso, estaría en su lugar aprender a usarlo a través de interoperabilidad COM, lo que le permite trabajar con COM de .NET.

Para que quede claro, .NET mucho fue la intención de ser un sustituto de COM. Y que funcionó bien, ha sido muy exitoso. Pero COM es todas partes en Windows, no se puede agitar un palo en un programa típico y no correr en algún lugar COM. Que se inicia con el primer fragmento de código en cualquier programa de interfaz gráfica de usuario .NET, [STAThread].

Hay montones y montones de cosas en Windows que no ha conseguido la envoltura .NET amistoso con todo. Que no siempre se necesita, el CLR tiene un excelente soporte para interoperabilidad COM. Bastante visible desde el cuadro de diálogo Agregar referencia, en la ficha COM está llena de golosinas. Pero lo que se ve en esa lista son componentes que fueron diseñados específicamente para que sea fácil de usar desde cualquier entorno de ejecución. Implementan un subconjunto de COM llama "Automatización OLE".

La automatización es un subconjunto muy restringida, que funciona tan bien porque lo que en realidad se puede hacer está limitado. Sin embargo, hay montones de código que no encajan en ese subgrupo. El tipo para la que no se puede encontrar una biblioteca de tipos. Sin la biblioteca de tipos se atornillan en .NET. El componente más visible con esta cuestión es la cáscara. Explorador de Windows. Escribir una extensión de shell en código administrado es duro .

El problema es que las declaraciones de interfaz COM fueron originalmente diseñados para funcionar bien en un compilador que implementa la 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 deriva de otra interfaz COM. El CLR genera el v-mesa equivocada. Esto se abordó en este MSDN artículo de la revista , aunque eso la conclusión del autor es bastante malo.

pueden COM declaraciones de interfaz de escritura en un lenguaje .NET y ponerlas en práctica. Es sólo que se obtiene no ayuda en absoluto desde el SDK. Y que usted necesita saber COM bastante bien como para hacerlo bien.

UMDF encaja este modelo también, sus interfaces se derivan de IUnknown. No biblioteca de tipos. No se logró envoltorio que yo sepa. Usted podría escribir el código en C #, pero vas a tener que escribir todas las declaraciones de interfaz usted mismo. Siendo realistas, sólo el C ++ se aplica aquí.

Sí, usted necesita aprender COM.

COM fue útil porque permitió que le permite construir una API independiente de lenguaje que pueda ser consumida a partir de múltiples idiomas. Ahora .NET es utilizado por aproximadamente el propósito Sampe, aunque es menos accesible. Si programa .NET, "trabajo justo" muchos de COM API, aunque es bueno tener algún conocimiento básico de cómo funciona COM (tales que los usos COM refcounting para la gestión de memoria, mientras que .NET utiliza la recolección de basura).

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top