2009-05-22 21 views
28

Tengo curiosidad sobre COM +, DCOM. Sé que MSFT no lo alienta a usar estas herramientas de forma nativa (es decir, con C/C++, de hecho, no hay mucha documentación disponible), pero quiero aprender a utilizar estas tecnologías, como integrar Internet Explorer en un programa en C.COM, COM +, DCOM, ¿por dónde empezar?

Pensé que tal vez podría encontrar personas que trabajaran con esto o que supieran sobre esta tecnología.

¿Por dónde empezar? ¿Algunas ideas? ¿Algún ejemplo (como Hello World DCOM)?

+4

Por cierto, no se desanime por la cantidad de aprendizaje sugerida por nuestras respuestas. Parece que está intentando escribir un cliente COM en lugar de un componente COM. Los clientes COM son de orden de magnitud más fácil de escribir que los componentes COM. Te divertirás. –

Respuesta

34

Si realmente quiere aprender COM, la "COM esencial" de Don Box es definitivamente una "lectura obligatoria" absoluta. COM puede ser confuso y, en mi humilde opinión, Don Box es una de las pocas personas que realmente "lo consiguió".

El código de ejemplo en "Essential COM" está en C++. No encontrará muchos libros que admitan COM en C. Puede escribir COM en C, pero será muy, muy doloroso. COM está optimizado para el desarrollo de C++.

Este libro no es perfecto ni "completo". Hay algunas áreas (concedidas, un poco esotéricas) sobre las que se pasa el libro. Por ejemplo, el libro tiene 1 1/2 páginas en "monikers" (nunca he visto un tratamiento de monikers que me satisfaga). Considero que este libro es EL libro fundamental.

En segundo lugar, en la vida real es probable que desee utilizar una biblioteca auxiliar como ATL, en lugar de escribir todo el pegamento COM directamente. Hay demasiadas formas de cometer errores sutiles en COM incluso en la configuración básica. ATL le dará buenos patrones e implementará el código aburrido para usted. Al aprender, es mejor que uses C++ simple.

Hay muchos libros sobre ATL y varios son bastante buenos. Entiendo que ATL ha cambiado bastante desde los viejos tiempos de VC++ 6, pero no tengo conocimiento de primera mano allí: lamentablemente, la mayor parte del código COM con el que trabajo queda bloqueado para siempre con el sabor de C++ en VC6. .

Asegúrate de que el libro que obtengas esté escrito para la versión de Visual Studio y/o ATL que planeas usar.

Algunos antecedentes de libros COM:

Tenga en cuenta que hay una gran cantidad de libros por ahí que entienden mal COM, o se centran en las cosas equivocadas. Los libros más antiguos son peores a este respecto. Algunos de los primeros libros trataban COM como poco más que un detalle de plomería necesario para hacer que OLE funcione ("Enlace e incrustación de objetos", eso es lo que le permite arrastrar y soltar un rango de hoja de cálculo en un documento de Word). Debido a eso, mucho del material que hay es muy confuso. Pasó un tiempo antes de que la gente se diera cuenta de que OLE no era tan importante y que COM realmente lo era.

Cuando Don Box publicó "Essential COM", las grietas en la base de COM comenzaron a hacerse evidentes. No hay nada terriblemente defectuoso con COM, pero las necesidades de la comunidad de desarrollo han evolucionado y han superado lo que COM podría hacer sin una reforma seria.

.NET nació de ese esfuerzo para abordar las limitaciones en COM, especialmente en el área de "información tipo". Pocos años después de que se publicara "COM eficaz", la atención de la comunidad se desplazó a .NET. Debido a eso, un buen material de capacitación COM es ahora y probablemente será limitado para siempre.

Por lo tanto, COM no está roto, y funciona muy bien para las cosas que se utiliza (es por eso que Explorer todavía lo usa). Ya no es la mejor solución para muchos de los problemas que deben resolverse hoy.

En resumen:

recomiendo "COM esencial" para los fundamentos. Luego, cualquiera de los muchos buenos libros de ATL disponibles (sin preferencias fuertes allí), y luego use otros recursos como MSDN o, por supuesto, Stack Overflow, para cubrir áreas que son de particular interés para usted.

Si prefiere evitar depender de los recursos de la variedad de árbol muerto, continúe aprendiendo ATL desde la web. Pero vale la pena leer algunos libros a la vieja usanza, y "Essential COM" es uno de ellos.

Buena suerte.

1

En realidad, si desea obtener más información acerca de COM, Microsoft publica un libro sobre COM y cómo funciona ... http://www.amazon.com/Inside-Microsoft-Programming-Dale-Rogerson/dp/1572313498/ref=sr_1_2?ie=UTF8&s=books&qid=1243029018&sr=8-2

+0

¿Es este estado del arte? Parece un poco viejo. –

+3

COM es viejo. Durante los últimos 8 años, todo el material de Microsoft Press ha sido sobre .NET. – Cheeso

+0

@ Cheeso tiene razón; COM es una tecnología antigua. Microsoft se está enfocando en .NET para la mayoría de sus nuevos desarrollos, pero el desarrollo de COM sigue siendo completamente válido; es solo que la mayoría de las referencias que encontrarás en él serán un poco viejas. –

10

COM, COM+ y DCOM son tres cosas completamente diferentes. En este punto, hay muy pocas razones para aprender COM y casi ninguna razón para aprender DCOM. La única razón por la que puedo pensar es si tiene que mantener o integrar componentes heredados. COM + todavía se usa porque permite el alojamiento fuera de proceso de componentes y cosas agradables como administración de transacciones distribuidas.

La mejor manera de comenzar a escribir algunos COM es usando ATL. En .NET COM + se llama Enterprise Services.

El mejor libro que conozco en COM es Don Box Essential COM y Tim Ewald's COM+ book es excelente también.

+2

+1 por "hay muy pocas razones para aprender COM", -1 por sugerir ATL a los novatos. Evens out :) – Andomar

+0

@Andomar: jajaja, sé que es ridículo. :) –

+5

El nuevo núcleo WinRT de Windows 8 se basa en COM. Los programadores comerciales con una buena comprensión de COM han tenido una gran demanda durante años y seguirán teniendo demanda durante muchos años más. – Neutrino

3

COM sigue siendo útil si desea trabajar con, o ampliar, varias API de Windows, como extensiones de shell, secuencias de comandos de host, etc.

Essential COM (Box) y ATL Internals (Rector and Sells) son excelentes fuentes. Eficaz COM (Box, et al) también está bien.

Si realmente desea la imagen completa en COM, intente obtener una copia de la inmensa Inside OLE (Brockschmidt).

Distributed COM (Eddon, Eddon) es decente en DCOM, al igual que Inside COM + Base Services (Eddon, Eddon) en COM +.

incluso algunos libros supuestamente "puros" de C++ tienen bits en COM en ellos. El Imperfet C++ de Matthew Wilson tiene algunas partes útiles para ver cómo funciona en el interior, y su libro Extended STL tiene un par de capítulos sobre cómo adaptar las colecciones COM a STL.

Si desea saber más acerca de cómo escribir servidores COM, probablemente deba esforzarse en ATL. El ATL Internals antes mencionado es una necesidad. A pesar de su título de sonido humilde, Beginning ATL COM también tiene algunas cosas útiles.

También es útil en el proceso de aprendizaje para contrastar COM con .NET. El .NET and COM Interoperability Handbook es un gran trago, pero tiene algunas cosas útiles. Además, verificaría Common Source CLI Essentials, solo para ayudar a contrastar las dos tecnologías.

HTH

+1

> Essential COM (Box, et al) también está bien ... ¿Quiere decir "COM eficaz" para su segunda entrada, ¿verdad? –

+0

En otra forma. Gracias por detectarlo. – DannyT

+2

¿De verdad? "COM efectivo" es Box, Brown, Ewald y Sells. "COM esencial" es solo cuadro. Ambos son excelentes libros. –

2

COM esencial es especialmente para la implementación o el uso de componentes COM de C++, sin necesidad de utilizar un IDE, marco, o en la biblioteca para ayudar.

COM es trivial de usar desde VB o desde Delphi, por ejemplo, que oculta el pegamento específico de COM del programador de aplicaciones. En C++, a menudo usas alguna biblioteca de clases que intenta abstraer los detalles ...Essential COM le dirá cuáles son esos detalles (y implementa su propia biblioteca/framework al hacerlo).

3

Comience con "Inside COM", luego continúe con "Inside DCOM" y luego lea "Essential COM". Obtendrá un control sobre COM. Tanto los libros Inside COM como Inside DCOM son publicaciones de Microsoft. Excelentes libros para quien desee conocer COM/DCOM a fondo.

6

I compilado una lista de libros, que debe ser leído en este orden:

  1. 'Inside COM' de Dale Rogerson, éste debería ser su primer libro. Explica los conceptos básicos del recuento de referencias, interfaces, IUnknown, componentes, idl, IDispatch, tipos de automatización y departamentos. De este libro, notará que se necesita bastante código para hacer componentes y que puede omitir fácilmente una 'Liberación', lo que conduce a la fuga de recursos. Además, a este libro le faltan algunos detalles.
  2. 'ATL Internals' de Tavares. ATL lo ayuda con el uso del cliente como componentes COM. Con punteros inteligentes (por ejemplo, CComPtr) es difícil obtener el recuento de referencias incorrecto en estos días. ATL también facilita la creación de componentes en C++. Desafortunadamente, ATL esconde muchas funciones en macro y tiene una forma contra intuitiva de implementar IUnknown. Una alternativa podría ser 'Inside ATL'.
  3. 'Essential COM' de Don Box. Este libro se menciona con frecuencia, pero no es un buen libro para principiantes. Se pierde la imagen general, pero es excelente en sus detalles (por ejemplo, la diferencia entre 'size_is' y 'length_is' en idl).
  4. 'Entender ActiveX y OLE: una guía para desarrolladores y gerentes'. Este libro toca algunas de las interfaces más esotéricas como IPersist, IStorage; IMoniker, etc., pero no entra en gran detalle.

Tenga en cuenta que COM es algo así como una tecnología antigua, aunque sigue siendo viable especialmente para desarrolladores nativos.