置き換え可能パラメーターでは、実行時データを指定するには、レジストラーのクライアントことができます。これを行うには、レジストラーに、スクリプトの置き換え可能パラメーターに関連付けられている値を入力、置換マップを保持します。レジストラーこれらのエントリは実行時になります。次のセクションでこれらの手順を示します。
ATL オブジェクト ウィザードが自動的に使用するスクリプトが生成されます %MODULE%
。ATL は、サーバーの DLL または EXE の実際の場所のこの置き換え可能パラメーターを使用します。
ほかの追加 %MODULE%
、スクリプトには、ATL オブジェクト ウィザードはまた、次の行オブジェクトのクラス宣言に追加:
DECLARE_REGISTRY_RESOURCEID(IDR_MYCOMAPP)
このマクロを展開するには:
静的な HRESULT WINAPI UpdateRegistry(BOOL bRegister){特価;_Module.UpdateRegistryFromResource (IDR_MYCOMAPP、bRegister); を返す}(&N)
ここで _Module
、次のメソッドと#defineステートメントが、グローバルCComModuleするを参照:
UpdateRegistryFromResource (UINT nResID、BOOL bRegister特価;構造体 _ATL_REGMAP_ENTRY ※ pMapEntries = NULL);# define UpdateRegistryFromResource UpdateRegistryFromResource(&N)
このメソッドを呼び出す AtlModuleUpdateRegistryFromResource
は、次のコードが含まれています:
ATLAPI AtlModuleUpdateRegistryFromResource(_ATL_MODULE*pM, nbsp;LPCOLESTR lpszRes、bRegister、BOOL 構造体 _ATL_REGMAP_ENTRY ※ pMapEntries、IRegistrar ※ pReg){USES_CONVERSION;...CComPtr <IRegistrar> p;...TCHAR szModule [_MAX_PATH];Getmodulefilename を (日 - > m_hInst、szModule、_MAX_PATH);p - > AddReplacement(OLESTR("Module")、T2OLE(szModule));...}
注特価;Atl\include\atlimpl.cpp でこのコードを見つけることができます。(&N)。
CoCreateInstanceのポインターを取得 p
の登録をポイントします。AddReplacement文字列を含む、 LPCOLESTRを受信する、「 Module
」、Win32 API 関数からは、取得した文字列を含む、 LPCOLESTRとしてだけでなく、 getmodulefilename を。このコードは、置き換えマップ エントリを追加、 Module
getmodulefilenameの結果に関連する値を持つ変数。今年プリプロセッサをみる、 %MODULE%
、スクリプトでは、それはgetmodulefilename をから値置き換えられます。
別の使用、プリプロセッサの実行時データをスクリプトのデータを連結することです。文字列はモジュールへのフルパスを含むエントリ必要がありますたとえば、「 , 1
」最後に追加。最初に、次の拡張を定義します。:
'MyGoofyKey' s 'モジュール %、1' =
次に、スクリプト処理メソッドのいずれかを呼び出す前に、交換、地図に追加します。:
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 トークンの最大サイズです。(トークン構文で認識可能な要素です。これは、作成または、プリプロセッサによって展開されたトークンが含まれています(&N)。
注特価;実行時に代替値を代入するには、ただしまたはDECLARE_REGISTRY_RESOURCEIDマクロへの呼び出しを削除します。代わりに、 CComModule::UpdateRegistryFromResourceを呼び出すあなた自身UpdateRegistryメンバー関数を置き換えるし、 _ATL_REGMAP_ENTRY構造体の配列を渡します。_ATL_REGMAP_ENTRYの配列 {NULL,NULL} が設定され、少なくとも 1 つのエントリが必要し、このエントリは、常に最後のエントリをする必要があります。UpdateRegistryFromResrouceが呼び出されるとそれ以外の場合、アクセス違反エラーが生成されます。(&N)。