Usar parâmetros substituíveis (o pré-processador do registrador)
Os parâmetros substituíveis permitem que o cliente do Registrador especifique dados em tempo de execução. Para fazer isso, o Registrador mantém um mapa de substituição no qual insere os valores associados aos parâmetros substituíveis em seu script. O Registrador faz essas entradas no tempo de execução.
Usar %MODULE%
O Assistente de Controle de ATL gera automaticamente um script que usa %MODULE%
. O ATL usa esse parâmetro substituível para o local real da DLL ou de EXE do servidor.
Concatenar dados em tempo de execução com dados de script
Outro uso do pré-processador é concatenar dados em tempo de execução com dados de script. Por exemplo, suponha que seja necessária uma entrada que contenha um caminho completo para um módulo com a cadeia de caracteres ", 1
" anexada no final. Primeiro, defina a seguinte expansão:
'MySampleKey' = s '%MODULE%, 1'
Em seguida, antes de chamar um dos métodos de processamento do script listados em Invocar scripts, adicione um substituto ao mapa:
TCHAR szModule[_MAX_PATH];
::GetModuleFileName(_AtlBaseModule.GetModuleInstance(), szModule, _MAX_PATH);
p->AddReplacement(OLESTR("Module"), T2OLE(szModule));
Durante a análise do script, o Registrador expandirá para '%MODULE%, 1'
para c:\mycode\mydll.dll, 1
.
Observação
Em um script do Registrador, 4K é o tamanho máximo do token. (Um token é todo elemento reconhecível na sintaxe.) Isso inclui tokens que foram criados ou expandidos pelo pré-processador.
Observação
Para substituir valores de substituição em tempo de execução, remova a chamada no script para a macro DECLARE_REGISTRY_RESOURCE ou DECLARE_REGISTRY_RESOURCEID. Em vez disso, substitua-o pelo próprio método UpdateRegistry
que chama CAtlModule::UpdateRegistryFromResourceD ou CAtlModule::UpdateRegistryFromResourceS, e passe a matriz de estruturas _ATL_REGMAP_ENTRY. A matriz de _ATL_REGMAP_ENTRY deverá ter pelo menos uma entrada definida como {NULL,NULL} e essa entrada sempre deverá ser a última entrada. Caso contrário, um erro de violação de acesso será gerado quando o UpdateRegistryFromResource
for chamado.
Observação
Ao compilar um projeto que gera um executável, o ATL adiciona aspas automaticamente ao redor do nome do caminho criado em tempo de execução com o parâmetro de script do registrador %MODULE%. Se você não quiser as aspas incluídas no nome do caminho, use o novo parâmetro %MODULE_RAW%.
Ao criar um projeto que gera uma DLL, o ATL não adicionará aspas ao nome do caminho se %MODULE% ou %MODULE_RAW% for usado.