По многочисленным просьбам слушателей :)
Кусок кода, реализующий возможность добавления своих данных в ObjectPropertyManager (OPM)
AcRxDynPropManager * pDynPropManager = NULL;
CComObject<CObjectProperty> *pProperty = NULL;
CComPtr<IPropertyManager> pPropMan;
AsdkYourObjectCLASS * Object;
bool isPorpertyInited = false;
//======================================
При создании объекта:
if (!isPorpertyInited)
{
AcRxClass *pClass = Object->isA();
pPropMan.p = GET_OPMPROPERTY_MANAGER(pClass);
_com_util::CheckError(CComObject<CProperty>::CreateInstance(&pProperty));
pProperty->AddRef();
pPropMan.p->AddProperty(pProperty);
isPorpertyInited = true; }
Дальше смотришь реализацию интерфейса IDynamicProperty в файле dynprops.h
и пишешь свой property (каждое свойство(property) должно иметь свой собственный класс)
Обязательно в заголовке класса твоего свойства (Property.h) - CProperty необходимо прописать до объявления конструктора класса:
BEGIN_COM_MAP (CProperty)
COM_INTERFACE_ENTRY (IDynamicProperty)
END_COM_MAP()
Все остальное см. в примере SimpleDynProps...
P.S. и не забудь выгрузить все указатели...
//========================================
... On_kUnloadAppMsg (void *pkt) {
if (!isPorpertyInited)
return (AcRx::AppRetCode::kRetOK);
isPorpertyInited = false;
try
{
_com_util::CheckError(pPropMan->RemoveProperty(pProperty));
pProperty->Release();
}
catch(const _com_error& )