대체 가능한 매개 변수 런타임 데이터를 지정 하는 등록 클라이언트를 허용 합니다. 이 위해 등록 대체 지도에 연관 된 스크립트에서 대체 가능한 매개 변수 값 입력을 유지 합니다. 등록 실행 시 이러한 항목을 만듭니다. 다음 섹션에서는 이러한 단계。
ATL 개체 마법사를 사용 하는 스크립트를 자동으로 생성 %MODULE% . ATL 서버 DLL 또는 EXE의 실제 위치에 대 한이 대체 가능 매개 변수 사용。
외에 추가 %MODULE% 스크립트를 ATL 개체 마법사 또한 다음 줄을 추가 개체의 클래스 선언:
DECLARE_REGISTRY_RESOURCEID(IDR_MYCOMAPP)
이 매크로 확장:
정적 HRESULT WINAPI UpdateRegistry(BOOL bRegister)
{
nbsp; _Module.UpdateRegistryFromResource (IDR_MYCOMAPP, bRegister); 반환
}(&N)
여기서 _Module 는 글로벌 CComModule는 다음 메서드 및 # define 문을 참조:
UpdateRegistryFromResource (UINT nResID, BOOL bRegister
nbsp;???? 구조체 _ATL_REGMAP_ENTRY * pMapEntries = NULL);
# define UpdateRegistryFromResource UpdateRegistryFromResource(&N)
이 메서드를 호출 AtlModuleUpdateRegistryFromResource , 다음 코드를 포함 하는:
ATLAPI AtlModuleUpdateRegistryFromResource(_ATL_MODULE*pM, nbsp;??????? LPCOLESTR lpszRes, BOOL bRegister 구조체 _ATL_REGMAP_ENTRY * pMapEntries IRegistrar * pReg)
{
? USES_CONVERSION;
? ...
? CComPtr <IRegistrar> p;
? ...
TCHAR szModule [_MAX_PATH];
? GetModuleFileName (오후-> m_hInst, szModule, 우리 모두의 _MAX_PATH);
? p-> AddReplacement(OLESTR("Module"), T2OLE(szModule));
...
}
메모nbsp;??Atl\include\atlimpl.cpp에서이 코드를 찾을 수 있습니다(&N).
CoCreateInstance 획득 포인터 p , 레지스트라를 가리키는. AddReplacement 문자열을 포함 하는 LPCOLESTR 를 수신 하는 그런 다음, " Module ", 뿐만 아니라 Win32 API 함수에서 인수 문자열을 포함 하는 LPCOLESTR GetModuleFileName. 대체 맵 항목을 추가 하는이 코드는 Module GetModuleFileName결과와 관련 된 값이 있는 변수입니다. 지금, 전처리기 보고 합니다 %MODULE% 스크립트에서 그것 GetModuleFileName 의 값으로 대체 됩니다。
전처리기의 또 다른 용도 런타임 데이터와 스크립트 데이터를 연결 하는 것. 예를 들어 우리가 필요로 문자열 모듈 전체 경로 포함 하는 항목 " , 1 "를 끝에 추가 합니다. 먼저, 다음과 같은 확장을 정의:
'MyGoofyKey' = '% 모듈 %1' s
그런 다음 메서드를 처리 하는 스크립트 중 하나를 호출 하기 전에 지도를 교체 추가:
TCHAR szModule [_MAX_PATH]
GetModuleFileName (오후 gt; m_hInst, szModule, 우리 모두의 _MAX_PATH);
p-> AddReplacement(OLESTR("Module"), T2OLE(szModule))
스크립트의 구문 분석을 하는 동안 등록 확장 '%MODULE%, 1' 에c:\mycode\mydll.dll, 1。
메모nbsp;??등록자 스크립트에서 4 K 최대 토큰 크기입니다. (토큰 구문에서 인식할 수 있는 요소입니다.) 이 생성 되거나 전처리기에 의해 확장 된 토큰을 포함(&N)。
메모nbsp;??런타임 시 대체 값으로 대체, DECLARE_REGISTRY_RESOURCE 또는 DECLARE_REGISTRY_RESOURCEID 매크로 호출을 제거 합니다. 대신, 호출 하는 CComModule::UpdateRegistryFromResource, 자신의 UpdateRegistry 멤버 함수로 교체 하 고 _ATL_REGMAP_ENTRY 구조체의 배열을 전달 합니다. _ATL_REGMAP_ENTRY 의 배열을 {NULL,NULL}로 설정 된 적어도 하나의 항목이 있어야 합니다. 그리고이 항목 항상 마지막 항목 이어야 합니다. UpdateRegistryFromResrouce 가 호출 될 때 액세스 위반 오류가 생성 될 그렇지 않으면(&N)。