ObjectARX, AutoCAD. Среда программирования библиотеки C++

Добавьте Поддержку Системного реестра и Новый Объект 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.


Содержание раздела