Compartilhar via


Usar parâmetros substituíveis (o pré-processador do registrador)

Observação

A ATL (Biblioteca de Modelos Ativos) continua com suporte. No entanto, não estamos mais adicionando recursos ou atualizando a documentação.

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 durante o tempo de execução.

Como 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á '%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 durante o tempo de execução, remova a chamada para a macro DECLARE_REGISTRY_RESOURCE ou DECLARE_REGISTRY_RESOURCEID no script. Em vez disso, substitua-o pelo seu próprio método UpdateRegistry que chama CAtlModule::UpdateRegistryFromResourceD ou CAtlModule::UpdateRegistryFromResourceS, e passe sua 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.

Confira também

Criando scripts do Registrador