Перейти к публикации

Конкретный вопрос по Sw Api


OriginalZealot

Рекомендованные сообщения

Из хелпа:

Syntax (COM)

status = Component2->IGetChildren ( &retval )

Output:

(LPCOMPONENT2*) retval

Pointer to an array of Component2 objects

Return:

(HRESULT) status

S_OK if successful

COM applications should use to Component2::IGetChildrenCount to determine the number of component children, which is the size of the array required to Component2::IGetChildren.

Определяю размер массива, выделяю память - первый компонент находится, а остальных нет.

Мысль N1: зачем передавать параметр по ссылке(а там именно указатель на указатель требуется), если расположение массива всё равно определяю я(т.к. я память под него должен выделять).

Мысль N2: пытался интерпретировать данную конструкцию как массив указателей на компоненты - результат, как ни странно, тот же.

Ссылка на сообщение
Поделиться на других сайтах


Определяю размер массива, выделяю память - первый компонент находится, а остальных нет.

<{POST_SNAPBACK}>

Может их и правда нет, в чем вопрос собственно. Есть status = Component2->IGetChildrenCount ( &retval ) которая выдает количество компонентов. Если вы посмотрите по хелпу то везде идут ссылки, полагаю для экономии ресурсов.
Ссылка на сообщение
Поделиться на других сайтах

В том то и дело, что они есть. Кроме того, IComponent2::IGetChildrenCount() возвращает правильное количество компонентов.

Ссылка на сообщение
Поделиться на других сайтах

To OriginalZealot

А если так, правда сделана в VS2003.

//........................................



	HRESULT hres;

	CComPtr<IModelDoc2> swModel;

	hres = iSwApp->get_IActiveDoc2(&swModel);



	CComPtr<IConfiguration> swConfig;

	hres = swModel->IGetActiveConfiguration(&swConfig);



	CComPtr<IComponent> swRootComponent;

	hres = swConfig->IGetRootComponent(&swRootComponent);



	VARIANT vChild;

	hres = swRootComponent->GetChildren(&vChild);



	SAFEARRAY* arrComp = V_ARRAY(&vChild);

	LPDISPATCH* pDispComp;

	long lHightIndex;

	long lCountComp;

	hres = SafeArrayAccessData(arrComp, (void**)&pDispComp);



	hres = SafeArrayGetUBound(arrComp, 1, &lHightIndex);

	lCountComp = lHightIndex +1;

	int iCount = static_cast<int>(lCountComp);

	for ( int i = 0; i < lCount; i++)

	{

		CComQIPtr<IComponent2>  swComponent;

		swComponent = pDispComp[i];

		VARIANT_BOOL bSupp;

		swComponent->IsSuppressed(&bSupp);

//.................................

	}
Ссылка на сообщение
Поделиться на других сайтах

На данный момент я сделал именно так, но это небезопасно с точки зрения типов com-интерфейсов.

Остается надеятся, что GetChildren вернет именно массив IComponent2.

Да собственно GetChildren это форма предназначеная для использования там, где работа с COM обрабатывается на уровне языка.

Ссылка на сообщение
Поделиться на других сайтах

Присоединяйтесь к обсуждению

Вы можете опубликовать сообщение сейчас, а зарегистрироваться позже. Если у вас есть аккаунт, войдите в него для написания от своего имени.
Примечание: вашему сообщению потребуется утверждение модератора, прежде чем оно станет доступным.

Гость
Ответить в тему...

×   Вставлено в виде отформатированного текста.   Вставить в виде обычного текста

  Разрешено не более 75 эмодзи.

×   Ваша ссылка была автоматически встроена.   Отобразить как ссылку

×   Ваш предыдущий контент был восстановлен.   Очистить редактор

×   Вы не можете вставить изображения напрямую. Загрузите или вставьте изображения по ссылке.

  • Сейчас на странице   0 пользователей

    Нет пользователей, просматривающих эту страницу.




  • Сообщения

    • gudstartup
      рука останавливается не потому что ей нужно время а потому что меняет траекторию движения. при столкновении происходит ошибка цикла а также у руки есть люфт. так вот попрыгунчик на этих станках фрезы падают не чаще чем на других а миллионы циклов смены они уже отработали.  при выходном контроле станок производит непрерывно цикл смены в течении 2 суток и вообще они работают как швейцарские часы.   так вы и таких не видели 
    • Guhl
      Вы ж меня собрались сводить на современные станки, а тут выясняется, что уже им как минимум 20 лет Если рука упрется в инструмент, ничего страшного не случится. На 1/8 отворачивают, потому что руке нужно время остановится, и неважно есть там тормоз или нет. А вот если в результате супертонких настроек для экономии 200 мсек, упадет фреза, стоимостью как сэкономленное время за 100 лет, вот это будет номер 
    • gudstartup
      вы можете предполагать все что угодно но рука должна быть не в зоне шпинделя а конкретно четко давать сигнал на разжим в строго определенной позиции и при этом шпиндель должен успеть разжаться когда рука начинает движение вниз по траектории. вы много чего подозреваете а я обслуживаю эти станки в течении 20 лет и ваше   0 целых, хрен десятых это с десяток градусов. вы забываете о скорости с которой движется рука.   настраивается не мотор а кулачки по фазам движения а они стоят на редукторе и мотором вы ничего не настроете  тут про 1\8 оборота имеется ввиду когда уже найден нужный угол но можно и без этого обойтись.  
    • maxx2000
      ой да ладно, доступ он будет делать. скачал в магазине хром расширение и сделал
    • filsan
      Благодарю. Попробую выше упомянутыми инструментами. Правда с дополнительными графиками и пользовательским анализом придется повозиться. Придется-таки делать доступ на народный ресурс за справкой))
    • Guhl
      В вашей документации однозначно сказано, что если инструмент выпадает, то произведите настройку Это не противоречит моему утверждению, что цанга должна открываться тогда и только тогда, когда рука в зоне шпинделя, то есть в зоне, где исключается выпадение инструмента    И 1/8 оборота мотора, это сколько в градусах поворота руки? Подозреваю, что 0 целых, хрен десятых
    • gudstartup
      нет там тормоза он включается только в конце цикла. это целиком динамический процесс. да вы равно не поймете- это же не логично а спец оправка по вашему зачем?? это подача сигнал на разжим шпинделя регулируется и если неправильно отрегулируете то инструмент либо выпадет либо будет выдирать.  
    • Guhl
      Так это и есть условие "рука в зоне шпинделя" То есть зона, где инструмент гарантированно не выпадает А отвернуть на 1/8, потому что тормоз накладывается   
    • gudstartup
      а вам что логику ладдера в мануале описывать надо? вот специально для вас  
    • Bot
      CGTech с гордостью представляет новейший релиз VERICUT версии 9.5. VERICUT – это ведущее в отрасли решение для симуляции, верификации и оптимизации таких процессов как обработка металла, аддитивное производство, гибридное производство и композиты. Это независимое автономное ПО, которое легко интегрируется со всеми основными системами CAM и управления инструментом, а также с существующими УП, даже с теми, которые были отредактированы или созданы средствами, отличными от CAM. Смотреть полностью
×
×
  • Создать...