使用可置換的參數 (登錄器的前置處理器)
可取代的參數可讓註冊機構用戶端指定執行時間資料。 若要這樣做,註冊機構會維護取代對應,它會在您的腳本中輸入與可取代參數相關聯的值。 登錄器會在執行時間建立這些專案。
使用 %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 將不會將引號新增至路徑名稱。