• Добро пожаловать на Форум пользователей ПО АСКОН. Пожалуйста, авторизуйтесь.
 

Уважаемые пользователи,

Хотим проинформировать вас о режиме работы регистрации на нашем сайте.

Зарегистрироваться возможно в рабочие дни, с 8:00 до 20:00 (мск).

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

Благодарим вас за понимание и сотрудничество. Мы ценим ваше терпение и стремимся предоставить вам лучший опыт использования нашего сервиса.

С уважением,
Команда Ascon

Document3DNotify косяк в SDK?

Автор YS, 16.03.20, 23:25:05

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

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

YS

Здравствуйте!
На базе примера из "SDK\Samples\Basic\events" пытаюсь писать свой обработчик событий в КОМПАС v18.1:

Public WithEvents iKompasObject As Kompas6API5.Application
Public WithEvents iDoc3D As Kompas6API5.Document3D
Public WithEvents iDoc3DNotify As Kompas6API5.Document3DNotify

Dim newDoc As Object ' текущий документ

newDoc = iKompasObject.ActiveDocument3D ' попробуем взять 3Д документ

If Not newDoc Is Nothing And iDoc3D Is Nothing Then

iDoc3D = newDoc ' подпишемся на его события

'проверяем тип интерфейса взятого документа iDoc3D:

MsgBox(Microsoft.VisualBasic.Information.TypeName(iDoc3D)) '-> показывает сообщение, что интерфейс документа трехмерной модели iDoc3D

=ksDocument3D.

iDoc3DNotify = iDoc3D.GetDocument3DNotify()

end if

на присвоении результата процедуры iDoc3DNotify = iDoc3D.GetDocument3DNotify() возникает ошибка:

System.InvalidCastException was unhandled by user code
  HResult=-2147467262
  Message=Невозможно привести COM-объект типа "System.__ComObject" к интерфейсному типу "Kompas6API5.Document3DNotify". Операция

завершилась со сбоем, поскольку вызов QueryInterface COM-компонента для интерфейса с IID "{C47AD225-84A3-39BF-B80C-CE4C576C9490}"

возвратил следующую ошибку: Интерфейс не поддерживается (Исключение из HRESULT: 0x80004002 (E_NOINTERFACE)).

Проверял возвращаемый интерфейсный тип:
Dim temp As Object = iDoc3D.GetDocument3DNotify()
MsgBox(Microsoft.VisualBasic.Information.TypeName(temp))

Возвращает: ksDocument3DNotify

Пробовал менять объявление переменных с добавлением "ks":
Public WithEvents iDoc3D As Kompas6API5.ksDocument3D
Public WithEvents iDoc3DNotify As Kompas6API5.ksDocument3DNotify

Ничего не поменялось, возникает ошибка приведения COM-объекта типа "System.__ComObject" к интерфейсному типу

"Kompas6API5.Document3DNotify".

Вроде интерфейсные типы соответствующие, в чем может быть проблема?
Косяк в SDK или кривые руки?


С уважением, Юрий.



YS

Перепробовав всевозможные варианты на разных машинах и в разных версиях студий, пришел к выводу, что зарегистрированные КОМПАСом COM объекты кривые (это которые подключаются к проекту через вкладку "COM" в студии).

В итоге проблему решил попробовав подключить NET библиотеки из примеров для С#, которые находятся в папке SDK\Samples\CSharp\Common.

Всем спасибо за внимание :)