За допомогою змінних параметрів (У реєстроутримувача препроцесор)

Змінні параметри дозволяють до реєстратора клієнта, щоб визначити час виконання даних. Для цього у реєстроутримувача підтримує мапі заміна, в якому він входить значення, пов'язані з змінного параметри у ваш сценарій. Реєстратор робить ці записи під час виконання. Наступний розділ показує такі дії.

За допомогою МОДУЛЯ %

ATL об'єкт майстер автоматично створює сценарій, який використовує %MODULE% . ATL використовує цей змінного параметра для фактичного місцезнаходження вашого сервера DLL або EXE.

Крім %MODULE% до сценарію, ATL об'єкт майстер також додає такий рядок декларації клас об'єкта:

DECLARE_REGISTRY_RESOURCEID(IDR_MYCOMAPP)

Цей макрос розширюється до:

статичний HRESULT WI&NAPI UpdateRegistry(BOOL bRegister)
{
 nbsp; повернення _Module.UpdateRegistryFromResource (IDR_MYCOMAPP, bRegister);
}

де _Module вказує на глобальному CComModule, який має такий метод і # визначити оператор:

UpdateRegistryFromResource (UI&NT nResID, BOOL bRegister,
 nbsp;     Структура _ATL_REGMAP_ENTRY * pMapEntries = NULL);

# визначити UpdateRegistryFromResource UpdateRegistryFromResource

Цей метод вимагає AtlModuleUpdateRegistryFromResource , який містить такий код:

ATLAPI AtlModuleUpdateRegistryFromResource(_ATL_MODULE*pM, nbsp;        LPCOLESTR lpszRes, BOOL bRegister, типу struct _ATL_REGMAP_ENTRY * pMapEntries, IRegistrar * pReg)
{
   USES_CONVERSION;
   ...
   P CComPtr <IRegistrar>;
   ...

TCHAR szModule [_MAX_PATH];
   GetModuleFileName (вечора - > m_hInst, szModule, _MAX_PATH);
   p - > AddReplacement(OLESTR("Module"), T2OLE(szModule));

...
}

Примітка   Ви можете знайти цей код в atl\include\atlimpl.cpp.

CoCreateInstance набуває вказівник p , що вказує реєстратора. Потім, AddReplacement отримує в LPCOLESTR , що містять рядок " Module ", а також на LPCOLESTR , що містять рядок, отримані від функції Win32 API, GetModuleFileName. Цей код додає записі карти заміна для на Module змінна, яка має значення, пов'язані з результатом GetModuleFileName. Тепер, коли що препроцесор бачить в %MODULE% в сценарій, вона буде замінити його значення з GetModuleFileName.

Об'єднання даних про час виконання сценарію даних

Інше використання що препроцесор є об'єднання даних про час виконання сценарію даних. Наприклад, припустимо, що ми повинні запис, який містить повний шлях до модуля з рядка " , 1 " дописується в кінці. По-перше, визначити такі розширення:

'MyGoofyKey' = 'МОДУЛЬ %, 1' s

Потім перед викликом один сценарій, які методи обробки, додайте заміна на карту:

TCHAR szModule [_MAX_PATH]
GetModuleFileName (вечора gt m_hInst, szModule, _MAX_PATH);
p - > AddReplacement(OLESTR("Module"), T2OLE(szModule))

Під час розбору сценарій, реєстратора розширює '%MODULE%, 1' доc:\mycode\mydll.dll, 1.

Примітка   У сценарії реєстратора 4 K є максимального розміру маркера. (Маркер-це будь-який невідомий елемент у синтаксис). Це включає в себе маркери, створених або збільшився на що препроцесор.

Приміткаnbsp;  Щоб замінити заміна значення під час виконання, видалити виклику DECLARE_REGISTRY_RESOURCE або DECLARE_REGISTRY_RESOURCEID макросів. Замість цього, замінити його на власний UpdateRegistry член функція, яка вимагає CComModule::UpdateRegistryFromResourceі передати ваші масиву _ATL_REGMAP_E&NTRY структур. Ваш масив _ATL_REGMAP_ENTRY потрібно мати принаймні один запис, який настроєно для {NULL,ПУСТІ}, і Ця запис повинен завжди бути останній запис. В іншому випадку, буде створено порушенням прав доступу при UpdateRegistryFromResrouce називається.

Index