ATL CAtlModule
구현에서는 가상화 된 RGS 값을 제거하고 대체 할 수있는 가상 CAtlModule::AddCommonRGSReplacements
을 제공합니다. 예를 들어
, 내 전형적인 ATL 코드는 다음과 같습니다 : COM 클래스에서
class CFooModule :
public CAtlDllModuleT<CFooModule>
{
[...]
// CAtlModule
HRESULT AddCommonRGSReplacements(IRegistrarBase* pRegistrar)
{
// Error handling omitted for code brevity
__super::AddCommonRGSReplacements(pRegistrar);
ATLASSERT(m_libid != GUID_NULL);
pRegistrar->AddReplacement(L"LIBID", _PersistHelper::StringFromIdentifier(m_libid));
pRegistrar->AddReplacement(L"FILENAME", CStringW(PathFindFileName(GetModulePath())));
pRegistrar->AddReplacement(L"DESCRIPTION", CStringW(AtlLoadString(IDS_PROJNAME)));
return S_OK;
}
내가 표준 전화 _pAtlModule->UpdateRegistryFromResource
의 세 번째 매개 변수로 토큰을 추가 UpdateRegistry
메소드를 오버라이드 (override).
따라서 하드 코딩 된 값이 토큰으로 바뀌기 때문에 많은 .RGS가 COM 클래스간에 공유됩니다. 특히,
HKCR
{
NoRemove CLSID
{
ForceRemove %CLSID% = s '%DESCRIPTION%'
{
InprocServer32 = s '%MODULE%'
{
val ThreadingModel = s 'Both'
}
val AppID = s '%APPID%'
TypeLib = s '%LIBID%'
}
}
}