TransferInterface - непонятки

Автор KrissKross, 17.11.16, 21:33:38

« назад - далее »

0 Пользователи и 1 гость просматривают эту тему.

KrissKross

Странное поведение TransferInterface

Работает как надо
Kompas6API5.ksPart part5 = kompas5.TransferInterface(part7, (int)ksAPITypeEnum.ksAPI5Auto, 0);

Вылетает сообщение об ошибке
Kompas6API5.ksFeature feat5 = kompas5.TransferInterface(feat7, (int)ksAPITypeEnum.ksAPI5Auto, 0);

Текст сообщения
ЦитироватьНеобработанное исключение типа "System.InvalidCastException" в System.Core.dll

Дополнительные сведения: Невозможно привести COM-объект типа "System.__ComObject" к интерфейсному типу "Kompas6API5.ksFeature". Операция завершилась со сбоем, поскольку вызов QueryInterface COM-компонента для интерфейса с IID "{088BF9A8-37D3-4B15-A7CA-8C52FF1DBC41}" возвратил следующую ошибку: Интерфейс не поддерживается (Исключение из HRESULT: 0x80004002 (E_NOINTERFACE)).

В чем может быть подвох

пробовал
Kompas6API5.Feature - та же ошибка

работаю в 16-ой версии Компас-3D

С уважением!

Цель преобразования?
Не факт, что будет работать.
Kompas6API5.ksFeature feat5 = kompas5.TransferInterface(feat7, (int)ksAPITypeEnum.ksAPI5Auto, o3d_feature);

KrissKross

Цель:
1. Максимально использовать API 7
2. Необходимо добраться до Macro 3D

Цитата: bvr от 25.12.10, 17:17:00
Добрый вечер
этот код
        elif iFeature.type == 105: # o3d_entity
            iEntity = iFeature.GetObject()
Вот на какой интерфейс возвращает iFeature.GetObject()?, Если IPart? Не могу разобраться!!!!
            if iEntity == None:
                continue

            if iEntity.type == 63: # o3d_MacroObject
                ProcessFeature(iKompasObject, iFeature, func, strStatus)

#3
По факту это интерфейс API5 только COM.
Поэтому ту строку нужно записать так:
Kompas6API5.ksFeature feat5 = kompas5.TransferInterface(feat7, (int)ksAPITypeEnum.ksAPI3DCom, o3d_feature);
Единственное Kompas6API5.ksFeature должно быть IFeature.
+ Благодарностей: 1

KrissKross

Благодарю Sabahs за ответ

попробую ksAPI3DCom

и небольшое уточнение
чему равен o3d_feature

из справки
ЦитироватьksObj3dTypeEnum
o3d_feature 120 интерфейс объекта дерева ksFeature
т.е. o3d_feature = 120

итого окончательная реализация
Kompas6API5.IFeature feat5 = kompas5.TransferInterface(feat7, (int)ksAPITypeEnum.ksAPI3DCom, 120);
+ Благодарностей: 1

Да равен 120, чтобы не гадать лучше смотреть в описании.

KrissKross

Рабочий вариант

Kompas6API5.ksFeature feat5 = kompas5.TransferInterface(feat7, (int)ksAPITypeEnum.ksAPI5Auto, 120) as Kompas6API5.ksFeature;

необходимо использовать явно приведение типов