Share via


Procedimientos recomendados para implementar un complemento de control de código fuente

Los siguientes detalles técnicos pueden ayudarle a implementar de forma confiable un complemento de control de código fuente en Visual Studio.

Problemas de administración de memoria

En la mayoría de los casos, el entorno de desarrollo integrado (IDE), que es el autor de la llamada, libera y asigna memoria. El complemento de control de código fuente devuelve cadenas y otros elementos en búferes asignados por el autor de la llamada. Las excepciones se indican en descripciones de funciones específicas en las que se producen.

Matrices de nombres de archivo

Cuando se pasa una matriz de archivos, no se pasa como una matriz contigua de nombres de archivo. Se pasa como una matriz de punteros a nombres de archivo. Por ejemplo, en SccGet, el lpFileNames parámetro pasa los nombres de archivo, donde lpFileNames es realmente un puntero a .char ** lpFileNames[0] es un puntero al nombre, lpFileNames[1] es un puntero al segundo nombre, etc.

Modelo grande

Todos los punteros son de 32 bits, incluso en sistemas operativos de 16 bits.

Rutas de acceso completas

Cuando se especifican nombres de archivo o directorios como argumentos, deben ser rutas de acceso completas o rutas UNC, sin las barras diagonales inversas finales. Es responsabilidad del complemento de control de código fuente traducirlos a rutas de acceso relativas si es un requisito del sistema de control de código fuente subyacente.

Especificar una ruta de acceso completa para el archivo DLL registrado

El IDE ya no carga archivos DLL desde rutas de acceso relativas (por ejemplo, .\NewProvider.dll). Se debe especificar una ruta de acceso completa del archivo DLL (por ejemplo, C:\Providers\NewProvider.dll). Este requisito refuerza la seguridad del IDE evitando la carga de archivos DLL de control de código fuente no autorizados o suplantados.

Compruebe si hay un complemento VSSCI existente al instalar el complemento de control de código fuente.

Es posible que un usuario que planee instalar el complemento de control de código fuente ya tenga instalado un complemento de control de código fuente existente en el equipo. El programa de instalación (configuración) del complemento que cree debe determinar si hay valores existentes para las claves del Registro pertinentes. Si estas claves ya están establecidas, el programa de instalación debe preguntar al usuario si desea registrar el complemento como complemento de control de código fuente predeterminado y reemplazar el que ya está instalado.

Códigos de resultado de error e informes

El SCC_OK código devuelto de una función de control de código fuente indica que la operación se ha realizado correctamente para todos los archivos. Si se produce un error en la operación, se espera que devuelva el último código de error encontrado.

La regla para la generación de informes es que si se produce un error en el IDE, el IDE es responsable de notificarlo. Si se produce un error en el sistema de control de código fuente, el complemento de control de código fuente es responsable de notificarlo. Por ejemplo, el IDE notificaría que no hay archivos seleccionados actualmente, mientras que este archivo ya está desprotegido lo notificaría el complemento.

Estructura de contexto

Durante la llamada a SccInitialize, el autor de la llamada pasa el ppvContext parámetro , que es un identificador sin inicializar a void. El complemento de control de código fuente puede omitir este parámetro o puede asignar una estructura de cualquier tipo y colocar un puntero a esa estructura en el puntero pasado. El IDE no entiende esta estructura, pero pasa un puntero a esta estructura en todas las demás llamadas del complemento. Esto proporciona información valiosa de la memoria caché de contexto al complemento que puede usar para mantener la información de estado global que se conserva en las llamadas de función sin usar variables globales. El complemento es responsable de liberar la estructura en una llamada a SccUninitialize.

Si el complemento establece el SCC_CAP_REENTRANT bit en SccInitialize (en concreto, en el lpSccCaps parámetro ), se usan varias estructuras de contexto para realizar un seguimiento de todos los proyectos que están abiertos.

Bitflags y otras opciones de comando

Para cada comando, como SccGet, el IDE puede especificar muchas opciones que cambian el comportamiento del comando.

La API admite la configuración de determinadas opciones por el IDE a través del fOptions parámetro . Estas opciones se describen en Bitflags usados por comandos específicos junto con los comandos que afectan. En general, estas son opciones para las que no se solicitaría al usuario.

La mayoría de las opciones de configuración configurables por el usuario no se definen de esta manera, ya que varían ampliamente entre los complementos de control de código fuente. Por lo tanto, el mecanismo recomendado es un botón Avanzado . Por ejemplo, en el cuadro de diálogo Obtener , el IDE solo muestra información que comprende, pero también muestra un botón Avanzado si el complemento tiene opciones para este comando. Cuando el usuario hace clic en el botón Avanzado , el IDE llama a SccGetCommandOptions para permitir que el complemento de control de código fuente solicite al usuario información, como bitflags o una fecha y hora. El complemento devuelve esta información en una estructura que se pasa durante el SccGet comando.