Uso de parámetros reemplazables, (el preprocesador del registrador)
Mediante los parámetros reemplazables el cliente de un registrador puede especificar datos en tiempo de ejecución. Para ello, el registrador mantiene una asignación de reemplazo en la que escribe los valores asociados a los parámetros reemplazables en el script. El registrador realiza estas entradas en tiempo de ejecución.
Uso de %MODULE%
El Asistente para controles ATL genera de forma automática un script que usa %MODULE%
. ATL emplea este parámetro reemplazable en la ubicación real del archivo DLL o EXE del servidor.
Concatenación de datos de tiempo de ejecución con datos de script
El preprocesador puede usarse también para concatenar datos en tiempo de ejecución con datos de script. Por ejemplo, supongamos que es necesaria una entrada que contenga una ruta de acceso completa a un módulo con la cadena ", 1
" que se anexa al final. En primer lugar, tendrá que definir la siguiente expansión:
'MySampleKey' = s '%MODULE%, 1'
A continuación y antes de llamar a uno de los métodos de procesamiento de scripts que se citan en Invocación de scripts, agregue un reemplazo al mapa:
TCHAR szModule[_MAX_PATH];
::GetModuleFileName(_AtlBaseModule.GetModuleInstance(), szModule, _MAX_PATH);
p->AddReplacement(OLESTR("Module"), T2OLE(szModule));
Durante el análisis del script, el registrador expande '%MODULE%, 1'
a c:\mycode\mydll.dll, 1
.
Nota:
En un script del registrador, el tamaño máximo del token es 4K. Un token es cualquier elemento reconocible en la sintaxis y se incluyen aquí tokens creados o expandidos por el preprocesador.
Nota:
Para sustituir los valores de reemplazo en tiempo de ejecución, elimine la llamada en el script a la macro DECLARE_REGISTRY_RESOURCE o DECLARE_REGISTRY_RESOURCEID. En lugar de esto, reemplácelo por su propio método UpdateRegistry
que llama a CAtlModule::UpdateRegistryFromResourceD o CAtlModule::UpdateRegistryFromResourceS y pase la matriz de estructuras _ATL_REGMAP_ENTRY. Debe haber al menos una entrada establecida en {NULL,NULL} en la matriz de _ATL_REGMAP_ENTRY y esta entrada siempre será la última. De lo contrario, se generará un error de infracción de acceso al llamarse a UpdateRegistryFromResource
.
Nota:
Al compilar un proyecto que genera un archivo ejecutable, ATL entrecomilla automáticamente el nombre de ruta de acceso creado en tiempo de ejecución con el parámetro de script de registrador %MODULE%. Si no desea que se entrecomille el nombre de ruta de acceso, use el nuevo parámetro %MODULE_RAW% en su lugar.
Al compilar un proyecto que genera un archivo DLL, ATL no entrecomillará el nombre de ruta de acceso si se emplea %MODULE% o %MODULE_RAW%.