--- title: "NewConstraint - пример использования при создании ассоциативного размера" type: guide api: [api7] tags: [guide, api7, newconstraint] sources: - newconstraint_example.html --- … IParametriticConstraintPtr association = dimObj1->NewConstraint(); if ( association ) { _variant_t partner = CreatePartner( obj1, obj2 ); // obj1, obj2 - объекты с которыми ассоциируем размер // Создаем ограничение Ассоциативность association->ConstraintType = ksCAssociation; association->Partner = partner; association->Create(); } ... //------------------------------------------------------------------------------- // Создать массив SafeArray типа LPDISPATCH // --- _variant_t CreatePartner( LPDISPATCH obj1, LPDISPATCH obj2 ) { _variant_t res; if ( obj2 ) { SAFEARRAY * pSANew = NULL; SAFEARRAYBOUND rgsabound; rgsabound.lLbound = 0; rgsabound.cElements = 2; // количество элементов в массиве pSANew = ::SafeArrayCreate(VT_DISPATCH, 1, &rgsabound); if ( pSANew ) { long i1 = 0; long i2 = 1; ::SafeArrayPutElement( pSANew, &i1, obj1 ); // положить первый объект ::SafeArrayPutElement( pSANew, &i2, obj2 ); // положить второй объект res.vt = VT_ARRAY | VT_DISPATCH; V_ARRAY(&res) = pSANew; } } else { if ( obj1 ) res = obj1; } return res; }