Добавьте Поддержку Системного реестра и Новый Объект COM ATL
1 Добавляют следующую функцию инициализации системного реестра к AsdkDesignCenterSamp.cpp. Эта функция основает системный реестр, основанный на ресурсах системного реестра, которые будут добавлены в более позднем шаге.
void registerAppInfo(HINSTANCE hInstance)
{
USES_CONVERSION;
HRESULT hRes = S_OK;
CComPtr<IRegistrar> p;
hRes = CoCreateInstance(CLSID_Registrar, NULL,
CLSCTX_INPROC_SERVER, IID_IRegistrar, (void**)&p);
if(SUCCEEDED(hRes))
{
// Get the AutoCAD Product key from the
// registry into a CString.
//
CString csProdKey = acrxProductKey();
// Use CStrings to obtain the authorization
// stamp from the registry.
//
CString csPath = "SOFTWARE\\Autodesk\\AutoCAD\\R15.0\\";
CString csStamp = csProdKey.Right(csProdKey.GetLength()
- csPath.GetLength());
_TCHAR szRegKey[_MAX_PATH];
_tcscpy(szRegKey, csStamp);
LPOLESTR pszId = T2OLE("AUTH");
// do a runtime swap of the registry key value.
//
p->AddReplacement(pszId, T2OLE(szRegKey));
_TCHAR szModule[_MAX_PATH];
GetModuleFileName(hInstance, szModule, _MAX_PATH);
LPCOLESTR szType = OLESTR("REGISTRY");
LPOLESTR pszModule = T2OLE(szModule);
// Pull the registry entries from the resource ID.
//
hRes = p->ResourceRegister(pszModule, IDR_REGISTRY1,
szType);
if(FAILED(hRes))
AfxMessageBox("Error registering the app info.");
}
}
2 Теперь добавляют новый Объект ATL, который поддержит интерфейс IAcDcContentView.
В Visual C++, выберите Вставку, Новый Объект ATL. В диалоге выбирают Объекты и выбирают Простой Объект. Нажмите Next, и введите имя для Объекта ATL. Для этого примера, назовите это AsdkDcContent. Теперь выберите позицию табуляции Names, и щелчок поддерживает ISupportErrorInfo. Нажмите OK, чтобы создать объект.
3 Затем мы должны добавить некоторую информацию системного реестра к секции ресурса проекта. Сначала создайте новый файл по имени AsdkDesignCenterSamp .rgs. Следующая распечатка должна быть изменена для вашего определенного проекта, где ID класса (CLSID) должен быть скопирован с вашего файла IDL. Используйте CLSID, который соответствует интерфейсу IAsdkDcContent. Так как они - значения GUID, они отличны для каждого нового проекта. Также для других проектов, Вы будете должны изменить секции расширений и также добавлять имя вашего определенного класса. Снова, этот пример использует AsdkDcContent.
HKLM
{
NoRemove ’SOFTWARE’
{
NoRemove ’Autodesk’
{
NoRemove ’AutoCAD’
{
NoRemove ’R15.0’
{
NoRemove ’%AUTH%’
{
NoRemove ’AutodeskApps’
{
NoRemove ’AcadDC’
{
NoRemove ’Extensions’
{
ForceRemove ’.txt’
{
val CLSID = s ’{<Your CLSID>}’
IconIndex = d ’0’
}
}
NoRemove ’Applications’
{
ForceRemove ’AsdkDcContent’
{
’Extensions’
{
.txt
{
val CLSID = s ’{<Your CLSID>}’
val IconIndex = d ’0’
}
}
CustomView = s ’Yes’
}
}
}
}
}
}
}
}
}
}
Сохраните этот файл, и в Visual C++ приносят ResourceView вперед. Откройте распечатку ресурсов, и разверните узла “REGISTRY”. Правый щелчок и импорт файл системного реестра. Это должно дать ресурсу ID IDR_REGISTRY1, но если это делает не, переименуйте это так, чтобы это соответствовало запросу в registerAppInfo.