置き換え可能パラメーターの使用 (レジストラー プリプロセッサ)
置き換え可能パラメーターを使用すると、レジストラーのクライアントが実行時のデータを指定できます。 これを行うために、レジストラーは、スクリプト内の置き換え可能パラメーターに関連付けられた値を入力する置換マップを保持します。 レジストラーにより、これらのエントリが実行時に作成されます。
%MODULE% の使用
ATL コントロール ウィザードによって、%MODULE%
を使用するスクリプトが自動的に生成されます。 ATL では、この置き換え可能なパラメーターをサーバーの DLL または EXE の実際の場所として使用します。
実行時データとスクリプト データの連結
プリプロセッサのもう 1 つの使用方法として、実行時データをスクリプト データと連結する方法があります。 たとえば、末尾に ", 1
" という文字列が追加されたモジュールへの完全なパスを含むエントリが必要であるとします。 まず、次の拡張を定義します。
'MySampleKey' = s '%MODULE%, 1'
次に、「スクリプトの呼び出し」に一覧表示されているスクリプト処理メソッドの 1 つを呼び出す前に、置換をマップに追加します。
TCHAR szModule[_MAX_PATH];
::GetModuleFileName(_AtlBaseModule.GetModuleInstance(), szModule, _MAX_PATH);
p->AddReplacement(OLESTR("Module"), T2OLE(szModule));
スクリプトの解析中、レジストラーによって '%MODULE%, 1'
が c:\mycode\mydll.dll, 1
に展開されます。
Note
レジストラー スクリプトでは、4K が最大のトークン サイズです。 (トークンとは、構文内で認識可能なすべての要素のことです。)これには、プリプロセッサによって作成または展開されたトークンが含まれます。
Note
実行時に置換値が代入されるようにする場合は、スクリプトの DECLARE_REGISTRY_RESOURCE または DECLARE_REGISTRY_RESOURCEID マクロへの呼び出しを削除します。 代わりに、CAtlModule::UpdateRegistryFromResourceD または CAtlModule::UpdateRegistryFromResourceS を呼び出す独自の UpdateRegistry
メソッドで置き換え、_ATL_REGMAP_ENTRY 構造体の配列を渡します。 _ATL_REGMAP_ENTRY の配列には、{NULL,NULL} に設定されているエントリが少なくとも 1 つ必要です。また、このエントリは常に最後のエントリにする必要があります。 それ以外の場合は、UpdateRegistryFromResource
が呼び出されると、アクセス違反エラーが生成されます。
Note
実行可能ファイルを出力するプロジェクトをビルドすると、%MODULE% レジストラー スクリプト パラメーターを使用して実行時に作成されたパス名を囲む引用符が ATL によって自動的に追加されます。 パス名に引用符を含めたくない場合は、代わりに新しい %MODULE_RAW% パラメーターを使用してください。
DLL を出力するプロジェクトをビルドするときに、%MODULE% または %MODULE_RAW% が使用されている場合、ATL によってパス名に引用符が追加されません。