Değiştirilebilir parametreler (Registrar'ın Preprocessor) kullanma

Değiştirilebilir parametreler Registrar'ın istemci çalışma zamanı verileri belirlemek izin verir. Bunu yapmak için içine girdiği bu değiştirilebilir parametreler komut ile ilişkili değerleri değiştirme göster kayıt tutar. Registrar, çalışma zamanında bu girişler yapar. Aşağıdaki bölümde bu adımları gösterilmiştir.

% MODÜLÜNÜ kullanarak

Atl nesne Sihirbazı'nı otomatik olarak kullanan bir komut dosyası oluşturur %MODULE% . atl, sunucunuzun dll ya da exe gerçek konumu için bu değiştirilebilir parametre kullanır.

Ekleme yanında %MODULE% komut dosyası, atl nesne Sihirbazı ayrıca nesnenin sınıf bildirimi için aşağıdaki satırı ekler:

DECLARE_REGISTRY_RESOURCEID(IDR_MYCOMAPP)

Bu makro için genişletir:

statik hresult WI&NAPI UpdateRegistry(BOOL bRegister)
{
 nbsp; _Module.UpdateRegistryFromResource (IDR_MYCOMAPP, bRegister); return
}

burada _Module aşağıdaki yöntemi ve # define deyimi olan genel CComModuleiçin ifade eder:

UpdateRegistryFromResource (UI&NT nResID, bool bRegister,
 nbsp;     struct _atl_regmap_entry * pMapEntries = null);

# define UpdateRegistryFromResource UpdateRegistryFromResource

Bu yöntem çağrıları AtlModuleUpdateRegistryFromResource , aşağıdaki kodu içeren:

ATLAPI AtlModuleUpdateRegistryFromResource(_ATL_MODULE*pM, nbsp;        lpcolestr lpszRes, bool bRegister, struct _atl_regmap_entry * pMapEntries, IRegistrar * pReg)
{
   USES_CONVERSION;
   ...
   CComPtr <IRegistrar> p;
   ...

tchar szModule [_max_path];
   GetModuleFileName (AM - > m_hInst, szModule, _max_path);
   p - > AddReplacement(OLESTR("Module"), T2OLE(szModule));

...
}

&Notnbsp;  Atl\include\atlimpl.cpp bu kodu bulabilirsiniz.

CoCreateInstance güncelleştirdiğini işaretçi p , hangi noktaları kayıt. Sonra AddReplacement dizesi içeren bir lpcolestr aldığı " Module ", yanı sıra Win32 API işlevinden edinilen dizesini içeren bir lpcolestr GetModuleFileName. Bu kod için bir değiştirme eşleme girişi ekler Module GetModuleFileNamesonuç ile ilgili bir değer olan değişken. Şimdi, ne zaman Önişlemci görür %MODULE% komut dosyasında, o o GetModuleFileName değerini değiştirir.

Çalışma Zamanı verileri komut dosyası veri içinde

Başka Önişlemci Çalışma Zamanı verileri komut dosyası veri bağlamak için kullanılır. Biz lüzum-in dizesiyle bir modül tam yolunu içeren bir girdi diyelim " , 1 " sonunda eklenir. İlk olarak, aşağıdaki genişleme tanımlayın:

'MyGoofyKey' = s '% modülü % 1'

Sonra bir komut dosyasını işleme yöntemleri çağırmadan önce bir yedek Haritası Ekle:

Tchar szModule [_max_path]
GetModuleFileName (AM-gt; m_hInst, szModule, _max_path);
p - > AddReplacement(OLESTR("Module"), T2OLE(szModule))

Komut dosyası Ayrıştırma sırasında Registrar genişletir '%MODULE%, 1' içinc:\mycode\mydll.dll, 1.

&Notnbsp;  Registrar komut dosyasında, simge boyutu 4 K'dır. (Belirteç sözdizimi tanınabilir herhangi bir öğedir.) Bu, oluşturulan veya Önişlemci tarafından genişletilmiş belirteçlerini içerir.

&Notnbsp;  Yedek değerleri zamanında yerine koymak için DECLARE_REGISTRY_RESOURCE veya DECLARE_REGISTRY_RESOURCEID makro çağrısı kaldırın. Bunun yerine, CComModule::UpdateRegistryFromResourceçağıran kendi UpdateRegistry üye işlevi ile değiştirin ve sizin _atl_regmap_entry yapıları dizisi geçmek. _atl_regmap_entry , dizi {null,null} olarak ayarlanmış en az bir giriş olması gerekir ve bu giriş her zaman en son giriş olmalıdır. UpdateRegistryFromResrouce çağrıldığında bir erişim ihlali hatası yoksa, oluşturulur.

Index