¿Cómo crear una DLL de COM en Visual Studio 2008?

Hace años que no he escrito una dll de COM. He hecho un par de clases ahora, que heredan de algunas interfaces COM, pero quiero probarlo. Yo sé que tengo que poner un GUID en algún lugar y, a continuación, registrar con regsvr32, pero ¿cuáles son los pasos?

Edit: lo Siento, olvidé mencionar que estoy usando C++.

OriginalEl autor Mark Ingram | 2009-01-21

3 Kommentare

  1. 10

    Para crear un nuevo proyecto ATL COM se puede proceder como sigue:

    1. Archivo/Nuevo Proyecto
    2. Visual C++//ATL ATL Proyecto
    3. Personalizar la configuración, y pulse finalizar cuando haya terminado

    Ha creado una nueva dll, pero está vacía, para agregar un objeto COM que usted puede hacer esto:

    1. Proyecto/Agregar Clase
    2. Visual C++//ATL ATL simple objeto, pulse agregar
    3. Darle el nombre que desee (como MyObject), y pulse finalizar para agregar

    Si quieres que un objeto implementar una interfaz

    1. En la vista de clases seleccione la clase de objeto (Cmiobjeto)
    2. Clic derecho/Agregar/Implementar la Interfaz…
    3. Puede seleccionar la Interfaz que va a implementar
      1. De una .archivo idl ya en sus proyectos de archivos
      2. De una .tlb/.dll/.exe que tiene una biblioteca de tipo incrustado
      3. De un objeto que ya registrados
    4. Cuando termine pulse finalizar

    PS: es mucho más fácil crear un nuevo proyecto ATL con el mismo nombre en una carpeta diferente, y añadir los archivos que ha personalizado. El asistente realiza varias tareas a la vez y crear varios archivos personalizados.

    Para proyectos grandes que son difíciles de agregar archivo por archivo, yo hago lo mismo pero en lugar de añadir mis archivos para el nuevo proyecto que empieza a copiar la configuración de los nuevos proyectos para el viejo, y la adición de ningún archivo adicional que ha creado el asistente y la fijación de los encabezados como stdafx.h para combinar la nueva configuración.

    PPS: Si desea que el archivo dll para apoyar MFC, en lugar de seleccionar Proyecto ATL usted tiene que seleccionar MFC/Dll de MFC. Cuando se agrega el ATL Simple Objeto el asistente le pedirá que agregue ATL apoyo para el proyecto.

    OriginalEl autor Ismael

  2. 3

    Que usted necesita para escribir una función llamada DllGetClassObject y de exportación. Esta función es responsable de la asignación de una «fábrica de clase», que también tiene a escribir, y que es a su vez capaz de asignar a instancias de su objeto COM. Tiene que implementar IClassFactory.

    No es demasiado difícil de hacer. La alternativa es el uso de ATL (ver xhantt la respuesta) que en teoría hace esto para usted, pero que en la práctica es un verdadero lío. De alguna manera se las arregla para encapsular la complejidad de COM en el interior de una capa de abstracción que es aún más complicado. Buena suerte tratando de mover un objeto entre Dll por ejemplo.

    Pero podría ejecutar el asistente para ATL sólo para ver un ejemplo de cómo declarar DllGetClassObject. La aplicación de IClassFactory es muy fácil – sólo uno de los métodos que las noticias de un objeto.

    Entonces usted necesita registrar su archivo DLL – es decir, poner las claves en el registro. El regsvr32 herramienta no puede hacer esto sin la ayuda de usted. Usted tiene que escribir y exportación otra función llamada DllRegisterServer, que hace todo el trabajo duro. Todo lo que regsvr32 hace es cargar la DLL, buscar DllRegisterServer y llamo.

    De nuevo, ATL tiene una manera de implementar esto para usted, pero lo hace mediante la lectura de un tipo de secuencia de comandos completa de modificaciones en el registro de instrucciones, almacenados en un .rgs archivo que queda incrustada en su archivo DLL de recursos. Si accidentalmente poner cualquier tipo de error de sintaxis en este archivo, el registro falla en silencio.

    Así que, de nuevo, puede que en realidad resulta más sencillo escribir un par de líneas de código para modificar el registro manualmente. Aquí están los detalles.

    Si usted utiliza C# en lugar de ello, usted no tiene ninguno de estos problemas. Todo está encapsulado muy limpia. Que en realidad funciona mucho mejor que C++ como una herramienta para el desarrollo de objetos COM.

    O IClassFactory2?

    OriginalEl autor Daniel Earwicker

  3. 1

    Al crear la solución, automáticamente se registra el dll.
    Y también crea dos archivos _i.c y .h archivo.

    Para probar el archivo dll crear la aplicación de ejemplo:

    1. Crear un ejemplo de aplicación de Win32. Incluir el _i.c y .h en el archivo cpp de la aplicación de win32 que tiene la función principal de

    2. Llamar A CoInitialize();

    3. Declarar un puntero de interfaz
      CComPtr pMyInterface = NULL; //donde IMyInterface se declara en _i.c

    4. Crear la instancia
      pMyInterface.CoCreateInstance(CLSID_MyClass); //CLSID_MyClass es el GUID que representa el

      Coclase

    5. Llamar a la Api presentes en la Interfaz

    6. Llamar A CoUnInitialize();

    He construido un pantano estándar de Win32 proyecto, no se ATL y MFC incluido. Necesito saber cómo configurar la configuración del proyecto para llegar a construir adecuadamente como una dll de COM.
    Puede consultar el siguiente enlace codeproject.com/script/Articles/MemberArticles.aspx?amid=88625

    OriginalEl autor Vinay

Kommentieren Sie den Artikel

Bitte geben Sie Ihren Kommentar ein!
Bitte geben Sie hier Ihren Namen ein

Pruebas en línea