long ConvertSafeArrayVariant
(
const CATSafeArrayVariant* iSafeArray,
double* ioDoubleArray,
long iSize = 0
)
long GetVariantArraySize(CATSafeArrayVariant * iArray)
...
#include "CATSafeArray.h"
#include "CATAutoConversions.h"
...
CATSafeArrayVariant * pArrVar = ...
long nArrVarLen = ::ConvertSafeArrayVariant ( pArrVar, (double*) NULL, 0 );
double * padArr = new double[ nArrVarLen ];
long nItemsConvert = ::ConvertSafeArrayVariant ( pArrVar, padArr , nArrVarLen );
...
delete[] padArr, padArr = NULL;
...
Artem писал(а):И еще вопрос Можно ли получить обьект от которого был получен обьект в другом парте(в екстернал референсах)?...или наоборот.....Смотрел ListPointingObjects / ListComponents /InverseAttrLink (CATISpecObject)- ничего не находится - шерстить весь обьект по ключам и листам ?
Artem писал(а):... обновляем все парты где предположительно, находятся зависимые точки ...
CATIAHybridShapePointOnCurve *piFalsePoint = ...............
piFalsePoint->GetCoordinates(ArrVar);
CATSafeArrayVariant* pArrVar=&ArrVar;
long nArrVarLen = ::ConvertSafeArrayVariant ( *pArrVar, (double*) NULL, 0 );
double * padArr = new double[ nArrVarLen ];
long nItemsConvert = ::ConvertSafeArrayVariant ( *pArrVar, padArr , nArrVarLen );
MessageBox (0,d2str(padArr[0]),L"vvv",1);
delete[] padArr, padArr = NULL;
Разобрался-
long nArrVarLen = ::ConvertSafeArrayVariant ( pArrVar, (double*) NULL, 0 );
long nItemsConvert = ::ConvertSafeArrayVariant ( pArrVar, padArr , nArrVarLen );
...
CATIAHybridShapePointOnCurve *piFalsePoint = ...
...
double adCoord[3] = { 0. };
CATSafeArrayVariant * pvaCoord = ::BuildSafeArrayVariant ( adCoord, 3 );
if ( NULL == pvaCoord )
...
HRESULT hr = piFalsePoint->GetCoordinates ( *pvaCoord );
if ( FAILED( hr ) )
...
long nItemsConvert = ::ConvertSafeArrayVariant ( pvaCoord, adCoord, 3 );
...
hr = ::FreeVariantSafeArray ( pvaCoord );
pvaCoord = NULL;
...
...
CATIMeasurablePoint_var spMeasPt = piFalsePoint;
if ( ! spMeasPt )
...
CATMathPoint mpFalsePoint;
HRESULT hr = spMeasPt->GetPoint( mpFalsePoint );
if ( FAILED( hr ) )
...
double dX = mpFalsePoint.GetX();
double dY = mpFalsePoint.GetY();
double dZ = mpFalsePoint.GetZ();
...
......Шееф разжуй уж дураку а ну или ссылками может какими поделитесь, а? Мне что шерсить всю таблицу виртуальных функций до тех пор пока какая нибудь не вернет предположительно лист импортируемых обьектов? Или есть более легкий путь?Дёргать функции нужного интерфейса не на прямую, а через указатель на (виртуальную) функцию-член (горячё любимый C++ и г-н Б.Страуструп такую возможность дают )
Artem писал(а):Где мне найти реализацию виртуальных FillParentsList/FillChildrenList?
Artem писал(а):Опять блин ProtectedInterfaces...
class ExportedByXxxYyyZzz CATIXxxYyyZzz : public CATBaseUnknown
{
CATDeclareInterface;
public:
virtual HRESULT MyFoo(const CATUnicodeString & iusStrParam) = 0;
};
...
#include "CATIXxxYyyZzz.h"
...
typedef HRESULT ( CATBaseUnknown::* my_foo_t ) ( const CATUnicodeString & );
...
CATBaseUnknown * piUnknown = ...
...
CATBaseUnknown * piUnkOnXxxYyyZzz = piUnknown->QueryInterface ( "CATIXxxYyyZzz" ); // see CATBaseUnknown.h
if ( NULL != piUnkOnXxxYyyZzz )
{
my_foo_t pmfMyFoo = (my_foo_t) &CATIXxxYyyZzz::MyFoo;
CATUnicodeString usMyFooParam = "This is a test";
HRESULT hr = (piUnkOnXxxYyyZzz->*pmfMyFoo) ( usMyFooParam );
...
}
...
Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 7