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.
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. –