Compartir a través de


Implementando VSPackages mediante la biblioteca de Visual Studio

la clase de IVsPackageImpl en la biblioteca de Visual Studio proporciona una implementación mínima de la interfaz de IVsPackage . IVsPackageImpl toma cuidado la mayoría de los métodos de mantenimiento de IVsPackage. Otros métodos que necesite para reemplazar para proporcionar una incluyen significativa de implementación:

Los paquetes que se implementan mediante la biblioteca de Visual Studio normalmente heredar una clase de Paquete de CComObjectRootEx (Clase) ATL y de CComCoClass (Clase) y de IVsPackageImpl de la biblioteca de Visual Studio. Por ejemplo, lo siguiente es la declaración de clase de Paquete de ejemplo de Reference.Package:

class ATL_NO_VTABLE BasicPackage : 
    public CComObjectRootEx<CComSingleThreadModel>,
    public CComCoClass<BasicPackage, &CLSID_BasicPackage>,
    public IVsPackageImpl<BasicPackage, &CLSID_BasicPackage>,
    ...

Los parámetros de plantilla de IVsPackageImpl mostrados son la propia clase de VSPackage y puntero a un GUID que identifica el paquete VSPackage.

Admitir QueryInterface con mapas COM

Para obtener compatibilidad con ATL para QueryInterface, el mapa COM debe mostrar las interfaces que la clase implementa. Por ejemplo, lo siguiente es el mapa COM para la clase de Paquete en el ejemplo de Reference.Package:

BEGIN_COM_MAP(BasicPackage)
    COM_INTERFACE_ENTRY(IVsPackage)
    ...
END_COM_MAP()

Para obtener más información sobre asignación COM, vea Implementar CComObjectRootEx y Macros de COM_INTERFACE_ENTRY.

Admitir el registro con los mapas del registro

La biblioteca de Visual Studio utiliza archivos de ATL-estilo .RGS para admitir el registro de objetos COM. Para admitir el reemplazo del token en el archivo de .RGS, la biblioteca de Visual Studio utiliza asignaciones de registro. Los mapas del registro muestran los símbolos que se reemplazarán y admiten el uso de los id. para los recursos de la tabla de cadenas.

Por ejemplo, lo siguiente es el registro asignado para la clase de Paquete en el ejemplo de Reference.Package:

VSL_BEGIN_REGISTRY_MAP(IDR_BASICPACKAGE_RGS)
    VSL_REGISTRY_MAP_GUID_ENTRY(CLSID_BasicPackage)
    VSL_REGISTRY_RESOURCE_STRING_ENTRY(IDS_BASICPACKAGE_REGISTRY_NAME)
    ...
VSL_END_REGISTRY_MAP()

Vea también

Conceptos

Ejemplos de extensibilidad de Visual Studio