Usando parâmetros substituível (escrivão) do pré-processador
Os parâmetros substituível permitem que o cliente de um escrivão especifica dados em tempo de execução.Para fazer isso, o escrivão mantém um mapa de substituição em que incorpora os valores associados com os parâmetros substituível no script.O escrivão faz essas entradas em tempo de execução.
Usando %MODULE%
Assistente de controle de ATL gera automaticamente um script que usa %MODULE%.ATL usa esse parâmetro substituível para o local da DLL ou real do EXE do servidor.
Concatenando dados em tempo de execução com dados de script
Outro uso pré-processamento é concatenar dados em tempo de execução com dados de script.Por exemplo, suponha que uma entrada é necessária que contém um caminho completo de um módulo com a cadeia de caracteres “, 1” acrescentado no final.Primeiro, defina a expansão seguir:
'MySampleKey' = s '%MODULE%, 1'
Em seguida, antes de chamar um dos métodos de processamento de script listados em invocando scripts, adicione uma substituição para o mapa:
TCHAR szModule[_MAX_PATH];
::GetModuleFileName(_AtlBaseModule.GetModuleInstance(), szModule, _MAX_PATH);
p->AddReplacement(OLESTR("Module"), T2OLE(szModule));
Durante a análise de script, o escrivão expande '%MODULE%, 1' a c:\mycode\mydll.dll, 1.
Observação |
---|
Em um script de escrivão, 4K é o tamanho máximo simbólico.(O símbolo de é qualquer elemento reconhecível na sintaxe.) Isso inclui os tokens que foram criados ou expandidos pelo pré-processador. |
Observação |
---|
Para substituir em tempo de execução valores de substituição, remova a chamada no script a macro de DECLARE_REGISTRY_RESOURCE ou de DECLARE_REGISTRY_RESOURCEID .Em vez de isso, substituí-lo com seu próprio método de UpdateRegistry que chama CAtlModule::UpdateRegistryFromResourceD ou CAtlModule::UpdateRegistryFromResourceS, e passe o seu vetor de estruturas de _ATL_REGMAP_ENTRY .Sua matriz de _ATL_REGMAP_ENTRY deve ter pelo menos uma entrada que é definida,NULO} {NULO, e essa entrada deve sempre ser a última entrada.Caso contrário, um erro de violação de acesso será gerado quando UpdateRegistryFromResource é chamado. |
Observação |
---|
Quando criar um projeto que a saída executável, um ATL adicionar automaticamente aspas ao redor do nome do caminho criou em tempo de execução com o parâmetro de script de escrivão de %MODULE% .Se você não deseja que o nome do caminho para incluir as aspas, use o novo parâmetro de %MODULE_RAW% em vez de isso. A o criar um projeto que a saída uma DLL, ATL não irão aumentar a aspas ao nome do caminho se %MODULE% ou %MODULE_RAW% são usados. |