Share via


置き換え可能パラメーターの使用 (レジストラー プリプロセッサ)

置き換え可能パラメーターを使用すると、レジストラーのクライアントが実行時のデータを指定できます。 これを行うために、レジストラーは、スクリプト内の置き換え可能パラメーターに関連付けられた値を入力する置換マップを保持します。 レジストラーにより、これらのエントリが実行時に作成されます。

%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 によってパス名に引用符が追加されません。

関連項目

レジストラー スクリプトの作成