注意
Active Template Library(ATL)將持續獲得支援。 不過,我們不再新增功能或更新文件。
可取代的參數可讓註冊機構用戶端指定運行時間數據。 若要這樣做,註冊管理機構會維持一個替換映射,將與可替換參數相關聯的值輸入到您的腳本中。 登錄器會在執行期間建立這些條目。
使用 %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。
注意
在域名註冊商腳本中,4K 是令牌大小的最大限制。 (詞元是語法中的任何可辨識元素。)這包括由預處理器建立或擴充的詞元。
注意
若要在執行期間取代替代值,請移除在腳本中對DECLARE_REGISTRY_RESOURCE或DECLARE_REGISTRY_RESOURCEID巨集的呼叫。 請改用您自己的 UpdateRegistry 方法取代它,以呼叫 CAtlModule::UpdateRegistryFromResourceD 或 CAtlModule::UpdateRegistryFromResourceS,並傳遞_ATL_REGMAP_ENTRY結構的陣列。 您的_ATL_REGMAP_ENTRY陣列必須至少有一個項目設定為 {NULL,NULL},而且這個專案一律應該是最後一個專案。 否則,UpdateRegistryFromResource 呼叫時會產生存取違規錯誤。
注意
建置輸出可執行檔的專案時,ATL 會自動使用 %MODULE% 登錄器腳本參數,在運行時間建立的路徑名稱周圍加上引號。 如果您不想讓路徑名稱包含引號,請改用新的 %MODULE_RAW% 參數。
建置輸出 DLL 的專案時,如果使用 %MODULE% 或 %MODULE_RAW% ,ATL 將不會將引號新增至路徑名稱。