Instrucciones para exponer tipos de .NET a COM
Cuando desea exponer tipos en un ensamblado de Microsoft .NET a aplicaciones de modelo de objetos componentes (COM), considerar los siguientes requisitos de interoperabilidad de COM en tiempo de diseño. Administrado tipos (
clase ,
interfaz ,
estructura ,
enumeración y otros) interactúan bien con las aplicaciones de cliente COM cuando siga estas directrices:
- Definir interfaces y implementar explícitamente en las clases. Interoperabilidad COM proporciona un mecanismo para generar automáticamente una interfaz que contiene todos los miembros de la clase y los miembros de su clase base. Sin embargo, es mejor proporcionar interfaces explícitas y implementar de forma explícita.
- Declarar tipos administrados todos los que desea exponer a COM como pública. Sólo los tipos públicos en un ensamblado están registrados y exportar a la biblioteca de tipo. Por tanto, sólo los tipos públicos son visibles para COM.
- Declarar a todos los miembros de tipo (métodos, propiedades, campos y eventos) que desee exponer a COM como pública. Los miembros de tipos públicos también deben ser públicos sean visibles para COM. De forma predeterminada, todos los tipos públicos y miembros son visibles. Utilice el atributo ComVisibleAttribute si tiene que ocultar un miembro de tipo o miembro visibilidad de controles para las aplicaciones de cliente COM o de un tipo.
- Los tipos deben tener un constructor predeterminado público para ejecutarse a través de COM administrado, tipos públicos son visibles para COM. Sin embargo, sin un constructor público predeterminado (un constructor sin argumentos), COM los clientes no pueden crear una instancia del tipo. Los clientes COM pueden utilizar el tipo si el tipo es crear instancias en otra forma y se devuelve al cliente COM la instancia. Puede incluir constructores sobrecargados que aceptan argumentos distintos para estos tipos. Sin embargo, los constructores que aceptan argumentos sólo se pueden llamar desde código administrado (. NET).
- Tipos no pueden ser abstractas. Ni los clientes COM como .NET los clientes pueden crear instancias de tipos abstractos.
- Utilice la plantilla clasecom en Visual Basic .NET o en Visual Basic 2005. Cuando agrega una nueva clase que desea exponer a las aplicaciones COM, considere el uso la plantilla clasecom que se proporciona mediante Visual Basic.NET o Visual Basic 2005. La plantilla clasecom crea una clase que incluye el atributo COMClassAttribute y genera GUID para el CLSID, el identificador de interfaz y su identificador que exponen su tipo. Además, la plantilla clasecom crea un constructor público sin parámetros. Esta es la forma más fácil para crear una nueva clase que sigue las instrucciones para crear tipos de COM al que se puede llamar.
Registrando el ensamblado de .NET para interoperabilidad COM y creando una biblioteca de tipo
Para Visual Basic 6.0 interactuar correctamente con un componente administrado, debe registrar el ensamblado para interoperabilidad COM y generar una biblioteca de tipo. Este registro debe realizarse en cada equipo donde un COM aplicación cliente interactúa con el ensamblado. La biblioteca de tipo proporciona información de tipo sobre los tipos expuestos en el ensamblado a las aplicaciones de cliente COM. El proceso para hacer esto depende de si está trabajando en el equipo de desarrollo o en el equipo de destino.
En el equipo de desarrollo Visual Studio.NET o Microsoft Visual Studio 2005 automáticamente crea una biblioteca de tipo y lo registra durante el proceso de generación si está activada la casilla de verificación
Registrar para interoperabilidad COM en Propiedades de
configuración del proyecto. Si utilizó la plantilla
clasecom cuando creó la clase, Visual Studio .NET o Visual Studio 2005 selecciona automáticamente el de
Registrar para interoperabilidad COM casilla de verificación. Para comprobar que está activada la casilla de verificación
Registrar para interoperabilidad COM en Visual Studio .NET o Visual Studio 2005, siga estos pasos:
- Inicie Visual Studio .NET o Visual Studio 2005.
- Abra la solución que contiene el proyecto que desea generar la interoperabilidad COM.
- En el menú Ver , haga clic en Solution Explorer .
- En el Explorador de soluciones, haga clic con el botón secundario del mouse en el proyecto que desea generar la interoperabilidad COM y, a continuación, haga clic en Propiedades .
- Haga clic en Propiedades de configuración y, a continuación, haga clic en el nodo Build .
Nota En Visual Studio 2005, haga clic en compilar en el panel izquierdo. - Haga clic para seleccionar el Register for COM Interop casilla de verificación. Esta opción sólo está habilitada en los proyectos de biblioteca de clases.
- Haga clic en Aceptar para cerrar el propiedad páginas cuadro de diálogo.
Si no está instalado Visual Studio .NET o Visual Studio 2005 o si tiene que generar manualmente y registrar un archivo de biblioteca (.tlb) de tipo para el ensamblado administrado, utilice la herramienta Registro de ensamblados (RegAsm.exe) con el
/ TLB cambiar. También se debe utilizar el modificador
/ código base si el ensamblado administrado es un ensamblado privado y desea colocar el ensamblado administrado en una carpeta diferente del proceso de host (EXE).
Un ensamblado privado se implementa con una aplicación y está disponible para uso exclusivo de esa aplicación. Otras aplicaciones no comparten el ensamblado privado. Ensamblados privados están diseñados para instalarse en la misma carpeta que el proceso de host (EXE). Con una aplicación de cliente COM, esto implica que el ensamblado se encuentra en la misma carpeta que esa aplicación. Un ensamblado compartido está disponible para uso por varias aplicaciones en el equipo. Para crear un ensamblado compartido, debe firmar el ensamblado con un nombre seguro e instalar al ensamblado en la caché de ensamblados global (GAC) en el equipo de destino.
Para obtener más información acerca de cómo firmar el ensamblado con un nombre seguro e instale al ensamblado en la caché de ensamblados global (GAC), visite el siguiente sitio Web de Microsoft:
Debe utilizar ambos el
/ tlb: modificador y el
/ la código base cambiar al registrar el ensamblado. El
/ tlb: modificador genera y registra una biblioteca de tipo, y el modificador
/ código base registra la ubicación del ensamblado administrado en el registro de Windows. Si no utiliza el modificador
/ código base y no se ha instalado el ensamblado en la caché de ensamblados global (GAC), debe colocar una copia del ensamblado en la carpeta de cada aplicación de cliente COM (EXE) para que se puede encontrar el ensamblado de common language Runtime (CLR).
Para generar y registrar una biblioteca de tipo y registrar la ubicación del ensamblado administrado, escriba el comando siguiente en el símbolo del sistema:
/tlb de Regasm AssemblyName.dll: FileName.tlb /CODEBASE
Crear un ensamblado al que se puede llamar de COM en Visual Basic .NET
- Inicie Visual Studio .NET o Visual Studio 2005.
- En el menú archivo , seleccione nuevo y, a continuación, haga clic en proyecto .
- En Tipos de proyecto , haga clic en Proyectos de Visual Basic .
Nota En Visual Studio2005 haga clic en Visual Basic bajo Tipos de proyecto . - En plantillas , haga clic en Class Library .
- Denomine el proyecto TestProj y, a continuación, haga clic en Aceptar .
De manera predeterminada se crea Class1. - En el menú Ver , haga clic en Solution Explorer .
- Haga clic con el botón secundario del mouse en Class1.vb y, a continuación, haga clic en Eliminar . Haga clic en Aceptar para confirmar la eliminación del archivo de origen Class1.vb.
- En el menú proyecto , haga clic en Agregar clase .
- En plantillas , haga clic en Clase COM .
- Asigne a la clase COMClass1.vb el nombre y, a continuación, haga clic en Abrir
COMClass1 se crea con el código siguiente.
_
Public Class ComClass1
#Region "COM GUIDs"
' These GUIDs provide the COM identity for this class
' and its COM interfaces. If you change them, existing
' clients will no longer be able to access the class.
Public Const ClassId As String = "6DB79AF2-F661-44AC-8458-62B06BFDD9E4"
Public Const InterfaceId As String = "EDED909C-9271-4670-BA32-109AE917B1D7"
Public Const EventsId As String = "17C731B8-CE61-4B5F-B114-10F3E46153AC"
#End Region
' A creatable COM class must have a Public Sub New()
' without parameters. Otherwise, the class will not be
' registered in the COM registry and cannot be created
' through CreateObject.
Public Sub New()
MyBase.New()
End Sub
End Class
- Agregue la siguiente función a COMClass1.
Public Function myFunction() As Integer
Return 100
End Function
- En el Explorador de soluciones, haga clic con el botón secundario en Project Name y, a continuación, haga clic en Propiedades .
- En Propiedades de configuración , haga clic en Generar .
- Compruebe que se comprueba la Registrar para interoperabilidad COM está activada y, a continuación, haga clic en Aceptar .
- En el menú Generar , haga clic en Generar soluciones para generar el proyecto.
- Inicie Visual Basic 6.0.
- En el menú archivo , haga clic en Nuevo proyecto y, a continuación, haga clic para seleccionar EXE estándar en el cuadro de diálogo Nuevo proyecto .
De forma predeterminada, se crea un formulario que se denomina Form1. - En el menú proyecto , haga clic en referencias .
- En la lista Referencias disponibles , haga doble clic para seleccionar TestProj y, a continuación, haga clic en Aceptar .
- Agregue un botón de comando al formulario.
- Haga doble clic en Command1 para abrir el código de ventana.
- Agregue el código siguiente al evento Command1_Click .
Dim myObject As TestProj.COMClass1
Set myObject = New TestProj.COMClass1
MsgBox myObject.myFunction
- En el menú Ejecutar , haga clic en iniciar .
- Haga clic en el botón de comando.
Debe recibir un mensaje que muestra 100.
Sacado del soporte de Microsoft.