Работа с AutoCad как с COM объектом

Автор Тема: Работа с AutoCad как с COM объектом  (Прочитано 13811 раз)

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

Оффлайн Александр Ривилис

  • Administrator
  • *****
  • Сообщений: 13882
  • Карма: 1787
  • Рыцарь ObjectARX
  • Skype: rivilis
Re: Работа с AutoCad как с COM объектом
« Ответ #15 : 18-03-2021, 17:15:34 »
На операторе dynamic str = CallFunc((object)app, () => AttributeRef.TextString); происходит исключение.
Где я не прав?
Ты получил коллекцию атрибутов , а не один атрибут. А обращаешься как к одному атрибуту.
Не забывайте про правильное Форматирование кода на форуме
Создание и добавление Autodesk Screencast видео в сообщение на форуме
Если Вы задали вопрос и на форуме появился правильный ответ, то не забудьте про кнопку Решение

Оффлайн Борис_САвтор темы

  • ADN OPEN
  • ***
  • Сообщений: 238
  • Карма: 3
Re: Работа с AutoCad как с COM объектом
« Ответ #16 : 18-03-2021, 17:23:46 »
Я пробовал писать и так: dynamic str = CallFunc((object)app, () => AttributeRef(0).TextString);
Результат тот же. Как можно вытащить элементы этой коллекции?

Оффлайн Александр Ривилис

  • Administrator
  • *****
  • Сообщений: 13882
  • Карма: 1787
  • Рыцарь ObjectARX
  • Skype: rivilis
Re: Работа с AutoCad как с COM объектом
« Ответ #17 : 18-03-2021, 17:28:04 »
Борис_С,
Посмотри в отладчике свойства AttributeRef. Думаю, что foreach по этой коллекции должен помочь.
Не забывайте про правильное Форматирование кода на форуме
Создание и добавление Autodesk Screencast видео в сообщение на форуме
Если Вы задали вопрос и на форуме появился правильный ответ, то не забудьте про кнопку Решение

Оффлайн Борис_САвтор темы

  • ADN OPEN
  • ***
  • Сообщений: 238
  • Карма: 3
Re: Работа с AutoCad как с COM объектом
« Ответ #18 : 18-03-2021, 18:04:23 »
Чтобы использовать foreach нужно сначала привести AttributeRef к какому-то известному типу. К типу AttributeCollection он не приводится. Выдает исключение.

Оффлайн Александр Ривилис

  • Administrator
  • *****
  • Сообщений: 13882
  • Карма: 1787
  • Рыцарь ObjectARX
  • Skype: rivilis
Re: Работа с AutoCad как с COM объектом
« Ответ #19 : 18-03-2021, 18:10:09 »
Перед тем как играться с dynamic попробуй добавить Reference на те сборки, которые я тебе указал выше и используй явные типы. В данном случае ты имеешь дело с Variant, который SafeArray. В C# скорее всего это Array.
Не забывайте про правильное Форматирование кода на форуме
Создание и добавление Autodesk Screencast видео в сообщение на форуме
Если Вы задали вопрос и на форуме появился правильный ответ, то не забудьте про кнопку Решение

Отмечено как Решение Борис_С 21-03-2021, 12:33:21

Оффлайн Александр Ривилис

  • Administrator
  • *****
  • Сообщений: 13882
  • Карма: 1787
  • Рыцарь ObjectARX
  • Skype: rivilis
Re: Работа с AutoCad как с COM объектом
« Ответ #20 : 18-03-2021, 18:13:59 »
Код - C# [Выбрать]
  1. foreach (dynamic att in AttributeRef)
или
Код - C# [Выбрать]
  1. foreach (dynamic att in en.GetAttributes())
Не забывайте про правильное Форматирование кода на форуме
Создание и добавление Autodesk Screencast видео в сообщение на форуме
Если Вы задали вопрос и на форуме появился правильный ответ, то не забудьте про кнопку Решение

Оффлайн Борис_САвтор темы

  • ADN OPEN
  • ***
  • Сообщений: 238
  • Карма: 3
Re: Работа с AutoCad как с COM объектом
« Ответ #21 : 18-03-2021, 21:24:18 »
Да, это работает. Спасибо.
Странно только, что API вытаскивает текст
"Комплект автоматики для приточной установки с жидкостным воздухонагревателем",
а COM -
"\W0.6500;Комплект автоматики для приточной установки с жидкостным воздухонагревателем"
Как я понимаю, API удаляет управляющие символы, а COM - выдает все.

Оффлайн Александр Ривилис

  • Administrator
  • *****
  • Сообщений: 13882
  • Карма: 1787
  • Рыцарь ObjectARX
  • Skype: rivilis
Re: Работа с AutoCad как с COM объектом
« Ответ #22 : 18-03-2021, 21:42:49 »
Как я понимаю, API удаляет управляющие символы, а COM - выдает все.
Если читать документацию....



Кстати, если аттрибут многострочный (свойство MTextAttribute  == true), то для него есть свойство MTextAttributeContent

Не забывайте про правильное Форматирование кода на форуме
Создание и добавление Autodesk Screencast видео в сообщение на форуме
Если Вы задали вопрос и на форуме появился правильный ответ, то не забудьте про кнопку Решение