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%.

Zobacz też

Tworzenie skryptów rejestratora