置き換え可能パラメーターを使用すると、レジストラーのクライアントは実行時データを指定できます。 この処理を実行できるように、レジストラーは置換マップを保持し、スクリプトの置き換え可能パラメーターに関連付けられた値をこの置換マップに格納します。 レジストラーは、実行時にこれらのエントリを作成します。
%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 に展開します。
注意
レジストラー スクリプトでは、トークンの最大サイズは 4 KB です。 トークンとは、構文で認識できるすべての要素です。プリプロセッサで作成または展開されたトークンも、最大サイズは 4 KB です。
注意
実行時に置換値を代入するには、スクリプト内の DECLARE_REGISTRY_RESOURCE マクロまたは DECLARE_REGISTRY_RESOURCEID マクロの呼び出しを削除します。 代わりに、CAtlModule::UpdateRegistryFromResourceD または CAtlModule::UpdateRegistryFromResourceS を呼び出す独自の UpdateRegistry メソッドを使用し、_ATL_REGMAP_ENTRY 構造体の配列を渡します。 _ATL_REGMAP_ENTRY の配列には、{NULL,NULL} に設定されたエントリが最低 1 つは必要です。さらに、このエントリは常に最後のエントリであることが必要です。 この条件を満たさない場合、UpdateRegistryFromResource を呼び出すと、アクセス違反エラーが発生します。
注意
実行可能ファイルを出力するプロジェクトをビルドする場合、ATL は、%MODULE% レジストラー スクリプト パラメーターで実行時に作成されたパス名の前後に引用符を自動的に追加します。 パス名を引用符で囲まない場合は、新しい %MODULE_RAW% パラメーターを代わりに使用します。
DLL を出力するプロジェクトをビルドする場合、ATL は、%MODULE% または %MODULE_RAW% を使用する場合でもパス名に引用符を追加しません。