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

置き換え可能パラメーターでは、実行時データを指定するには、レジストラーのクライアントことができます。これを行うには、レジストラーに、スクリプトの置き換え可能パラメーターに関連付けられている値を入力、置換マップを保持します。レジストラーこれらのエントリは実行時になります。次のセクションでこれらの手順を示します。

% モジュールを使用してください。

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)。

Index