Использование подстановочных параметров (препроцессор регистратора)
Заменяемые параметры позволяют клиенту регистратора указывать данные во время выполнения. Для этого регистратор сохраняет карту замены, в которую он вводит значения, связанные с заменяемыми параметрами в скрипте. Регистратор делает эти записи во время выполнения.
Использование %MODULE%
Мастер управления ATL автоматически создает скрипт, который использует%MODULE%
. ATL использует этот заменяемый параметр для фактического расположения библиотеки DLL или EXE сервера.
Объединение данных во время выполнения с данными скрипта
Другим способом использования препроцессора является объединение данных во время выполнения с данными скрипта. Например, предположим, что требуется запись, содержащая полный путь к модулю со строкой ", 1
" в конце. Сначала определите следующее расширение:
'MySampleKey' = s '%MODULE%, 1'
Затем перед вызовом одного из методов обработки скриптов, перечисленных в вызовах скриптов, добавьте замену на карту:
TCHAR szModule[_MAX_PATH];
::GetModuleFileName(_AtlBaseModule.GetModuleInstance(), szModule, _MAX_PATH);
p->AddReplacement(OLESTR("Module"), T2OLE(szModule));
Во время синтаксического анализа скрипта регистратор расширяется '%MODULE%, 1'
в c:\mycode\mydll.dll, 1
.
Примечание.
В скрипте регистратора 4K — это максимальный размер токена. (Маркер является любым распознаваемым элементом в синтаксисе.) Сюда входят маркеры, созданные или развернутые препроцессором.
Примечание.
Чтобы заменить значения замены во время выполнения, удалите вызов скрипта в макрос DECLARE_REGISTRY_RESOURCE или DECLARE_REGISTRY_RESOURCEID . Вместо этого замените его собственным UpdateRegistry
методом, который вызывает CAtlModule::UpdateRegistryFromResourceD или CAtlModule::UpdateRegistryFromResourceS, и передайте массив структур _ATL_REGMAP_ENTRY. Массив _ATL_REGMAP_ENTRY должен иметь по крайней мере одну запись, которая имеет значение {NULL,NULL}, и эта запись всегда должна быть последней записью. В противном случае при UpdateRegistryFromResource
вызове возникает ошибка нарушения доступа.
Примечание.
При создании проекта, который выводит исполняемый файл, ATL автоматически добавляет кавычки вокруг имени пути, созданного во время выполнения с параметром скрипта регистратора %MODULE% . Если вы не хотите, чтобы имя пути включало кавычки, используйте новый параметр %MODULE_RAW% вместо него.
При создании проекта, выходяющего библиотеку DLL, ATL не добавит кавычки в имя пути, если используется %MODULE% или %MODULE_RAW%.