Używanie wymiennych parametrów (preprocesor rejestratora)
Parametry możliwe do zastąpienia umożliwiają klientowi rejestratora określanie danych czasu wykonywania. W tym celu rejestrator przechowuje mapę zastępczą, do której wprowadza wartości skojarzone z parametrami, które można zamienić w skrypcie. Rejestrator tworzy te wpisy w czasie wykonywania.
Korzystanie z %MODULE%
Kreator kontrolek ATL automatycznie generuje skrypt, który używa polecenia %MODULE%
. AtL używa tego zastępowalnego parametru dla rzeczywistej lokalizacji biblioteki DLL lub EXE serwera.
Łączenie danych czasu wykonywania z danymi skryptu
Innym zastosowaniem preprocesora jest łączenie danych czasu wykonywania z danymi skryptu. Załóżmy na przykład, że potrzebny jest wpis zawierający pełną ścieżkę do modułu z ciągiem ", 1
" dołączonym na końcu. Najpierw zdefiniuj następujące rozszerzenie:
'MySampleKey' = s '%MODULE%, 1'
Następnie przed wywołaniem jednej z metod przetwarzania skryptów wymienionych w wywołaniu skryptów dodaj zamianę na mapę:
TCHAR szModule[_MAX_PATH];
::GetModuleFileName(_AtlBaseModule.GetModuleInstance(), szModule, _MAX_PATH);
p->AddReplacement(OLESTR("Module"), T2OLE(szModule));
Podczas analizowania skryptu rejestrator rozszerza '%MODULE%, 1'
wartość na c:\mycode\mydll.dll, 1
.
Uwaga
W skrypcie rejestratora 4K jest maksymalnym rozmiarem tokenu. (Token jest dowolnym rozpoznawalnym elementem w składni). Obejmuje to tokeny, które zostały utworzone lub rozwinięte przez preprocesor.
Uwaga
Aby zastąpić wartości zastępcze w czasie wykonywania, usuń wywołanie w skrypcie do makra DECLARE_REGISTRY_RESOURCE lub DECLARE_REGISTRY_RESOURCEID . Zamiast tego zastąp ją własną UpdateRegistry
metodą, która wywołuje metodę CAtlModule::UpdateRegistryFromResourceD lub CAtlModule::UpdateRegistryFromResourceS, a następnie przekaż tablicę struktur _ATL_REGMAP_ENTRY. Tablica _ATL_REGMAP_ENTRY musi zawierać co najmniej jeden wpis ustawiony na {NULL,NULL}, a ten wpis powinien być zawsze ostatnim wpisem. W przeciwnym razie po wywołaniu zostanie wygenerowany UpdateRegistryFromResource
błąd naruszenia dostępu.
Uwaga
Podczas kompilowania projektu, który generuje plik wykonywalny, usługa ATL automatycznie dodaje znaki cudzysłowu wokół nazwy ścieżki utworzonej w czasie wykonywania z parametrem skryptu rejestratora %MODULE%. Jeśli nie chcesz, aby nazwa ścieżki zawierała znaki cudzysłowu, zamiast tego użyj nowego parametru %MODULE_RAW%.
Podczas kompilowania projektu, który generuje bibliotekę DLL, ATL nie doda cudzysłowu do nazwy ścieżki, jeśli jest używany %MODULE% lub %MODULE_RAW%.