Вызов макроса VBA из .NET - приложения

Автор Тема: Вызов макроса VBA из .NET - приложения  (Прочитано 8212 раз)

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

Оффлайн sangvinik128Автор темы

  • ADN OPEN
  • **
  • Сообщений: 87
  • Карма: 0
Здравствуйте ! Есть макрос, написанный на VBA, который перебирает все DWG - файлы в выбранной пользователем директории и меняет в них значения некоторых атрибутов. Мне нужно написать обработчик ошибок "на открытие" таким образом, чтобы, если при открытии DWG - файла возникает фатальная ошибка, то от такого "битого" файла избавляться и продолжать  работу макроса. Я пытаюсь вшить макрос VBA в код C# .NET  как представлено в примере https://adn-cis.org/zagruzka-i-vyipolnenie-vba-makrosa-iz-.net-prilozheniya.html, но мне выдаёт ошибку "CS0656". Взываю о помощи к опытным программистам в AutoCAD, т.к. не имею опыта в программировании в AutoCAD, до этого писал просто десктопные приложения. Возможно ли это сделать, или стоит всё переписать в .NET' e ?

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

  • Administrator
  • *****
  • Сообщений: 13829
  • Карма: 1784
  • Рыцарь ObjectARX
  • Skype: rivilis
Re: Вызов макроса VBA из .NET - приложения
« Ответ #1 : 20-11-2019, 15:13:54 »
Приветствую на форуме!
Так как тема про C#, то перенёс её в правильный раздел.
но мне выдаёт ошибку "CS0656"
Это код ошибки. А само сообщение об ошибке? И где сам код, чтобы можно было понять на какую строку кода ругается?
Не забывайте про правильное Форматирование кода на форуме
Создание и добавление Autodesk Screencast видео в сообщение на форуме
Если Вы задали вопрос и на форуме появился правильный ответ, то не забудьте про кнопку Решение

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

  • Administrator
  • *****
  • Сообщений: 13829
  • Карма: 1784
  • Рыцарь ObjectARX
  • Skype: rivilis
Re: Вызов макроса VBA из .NET - приложения
« Ответ #2 : 20-11-2019, 15:15:35 »
Мне нужно написать обработчик ошибок "на открытие" таким образом, чтобы, если при открытии DWG - файла возникает фатальная ошибка, то от такого "битого" файла избавляться и продолжать  работу макроса.
У тебя с большой вероятностью таким образом ничего не получится. При открытии сбойного файла, если возникнет Fatal Error в AutoCAD, ты никаким обработчиком его не перехватишь.
Не забывайте про правильное Форматирование кода на форуме
Создание и добавление Autodesk Screencast видео в сообщение на форуме
Если Вы задали вопрос и на форуме появился правильный ответ, то не забудьте про кнопку Решение

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

  • Administrator
  • *****
  • Сообщений: 13829
  • Карма: 1784
  • Рыцарь ObjectARX
  • Skype: rivilis
Re: Вызов макроса VBA из .NET - приложения
« Ответ #3 : 20-11-2019, 15:18:15 »
Возможно ли это сделать, или стоит всё переписать в .NET' e ?
В любом случае лучше всё переписать на .NET - все возможности, которые были в VBA у тебя останутся, но появится множество новых.
Не забывайте про правильное Форматирование кода на форуме
Создание и добавление Autodesk Screencast видео в сообщение на форуме
Если Вы задали вопрос и на форуме появился правильный ответ, то не забудьте про кнопку Решение

Оффлайн sangvinik128Автор темы

  • ADN OPEN
  • **
  • Сообщений: 87
  • Карма: 0
Re: Вызов макроса VBA из .NET - приложения
« Ответ #4 : 20-11-2019, 15:28:09 »
Я понял Вас. Спасибо. А если предварительно фиксить ошибку посредством работы с реестром на С++ ? Просто я даже не знаю происхождения этой ошибки, пока что. Т.к. этот код ошибки нигде в гугле не обсуждался ( по крайней мере я не нашёл ). Вообще, я подозреваю, что проблему вызывает СПДС, т.к. в чистом автокаде фатальная ошибка с этими же файлами DWG не возникает

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

  • Administrator
  • *****
  • Сообщений: 13829
  • Карма: 1784
  • Рыцарь ObjectARX
  • Skype: rivilis
Re: Вызов макроса VBA из .NET - приложения
« Ответ #5 : 20-11-2019, 15:35:31 »
А если предварительно фиксить ошибку посредством работы с реестром на С++ ?
Это уже я не понял. Причем здесь реестр?
Правильный алгоритм должен быть таким:
В цикле запускается AutoCAD (а лучше для скорости AcCoreConsole), который обрабатывает dwg-файлы и записывает информацию об обработанных в какой-то файл. Если происходит аварийное завершение (или зависание), AutoCAD перезапускается и начинает обрабатывать со следующего файла.
Не забывайте про правильное Форматирование кода на форуме
Создание и добавление Autodesk Screencast видео в сообщение на форуме
Если Вы задали вопрос и на форуме появился правильный ответ, то не забудьте про кнопку Решение

Оффлайн sangvinik128Автор темы

  • ADN OPEN
  • **
  • Сообщений: 87
  • Карма: 0
Re: Вызов макроса VBA из .NET - приложения
« Ответ #6 : 20-11-2019, 15:44:46 »
А как же мне перехватить аварийное завершение AutoCAD ?

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

  • Administrator
  • *****
  • Сообщений: 13829
  • Карма: 1784
  • Рыцарь ObjectARX
  • Skype: rivilis
Re: Вызов макроса VBA из .NET - приложения
« Ответ #7 : 20-11-2019, 15:54:01 »
А как же мне перехватить аварийное завершение AutoCAD ?
Я же написал.  Нужно написать своё C# внешнее (exe) приложение, которое запускает AutoCAD/AcCoreConsole и проверять запущен он или нет. Задача не столь тривиальная, так как он может еще и "подвиснуть" (hangup).
Изнути AutoCAD аварийное завершение ты перехватить не сможешь.
Не забывайте про правильное Форматирование кода на форуме
Создание и добавление Autodesk Screencast видео в сообщение на форуме
Если Вы задали вопрос и на форуме появился правильный ответ, то не забудьте про кнопку Решение

Оффлайн Привалов Дмитрий

  • ADN Club
  • *****
  • Сообщений: 534
  • Карма: 117
Re: Вызов макроса VBA из .NET - приложения
« Ответ #8 : 20-11-2019, 15:55:24 »
А как же мне перехватить аварийное завершение AutoCAD ?
От вылета AutoCAD тебя мало что спасет. Можешь попробовать какие-то другие варианты перед обработкой файлов, например:

Открывать все файлы через восстановление. Шансы на успех повысятся.

Прогнать всю папку через DWG TrueView, там есть галочка - исправлять ошибки. А потом уже работать с папкой

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

Оффлайн sangvinik128Автор темы

  • ADN OPEN
  • **
  • Сообщений: 87
  • Карма: 0
Re: Вызов макроса VBA из .NET - приложения
« Ответ #9 : 20-11-2019, 16:06:43 »
Понял. Спасибо большое за ответы ! Пока пойду по пути C# .NET

Оффлайн sangvinik128Автор темы

  • ADN OPEN
  • **
  • Сообщений: 87
  • Карма: 0
Re: Вызов макроса VBA из .NET - приложения
« Ответ #10 : 21-11-2019, 10:45:18 »
А вы не подскажете какую - нибудь литературу, в которой можно почитать каким образом работать с DWG - файлом из .NET ? Не через командную строку AutoCAD, а  из exe - файла.

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

  • Administrator
  • *****
  • Сообщений: 13829
  • Карма: 1784
  • Рыцарь ObjectARX
  • Skype: rivilis
Re: Вызов макроса VBA из .NET - приложения
« Ответ #11 : 21-11-2019, 11:20:44 »
А вы не подскажете какую - нибудь литературу, в которой можно почитать каким образом работать с DWG - файлом из .NET ? Не через командную строку AutoCAD, а  из exe - файла.
Напрямую с DWG-файлом из внешнего exe-файла бесплатно работать нельзя. Все библиотеки для работы с dwg-файлами стоят очень приличных денег.  Это RealDWG от Autodesk:
https://www.autodesk.com/developer-network/platform-technologies/realdwg

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

Оффлайн sangvinik128Автор темы

  • ADN OPEN
  • **
  • Сообщений: 87
  • Карма: 0
Re: Вызов макроса VBA из .NET - приложения
« Ответ #12 : 21-11-2019, 11:26:34 »
Короче всё таки придётся "изобретать велосипед" для решения моей задачи, как я понял. Спасибо. А так надеялся упростить себе жизнь... )

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

  • Administrator
  • *****
  • Сообщений: 13829
  • Карма: 1784
  • Рыцарь ObjectARX
  • Skype: rivilis
Re: Вызов макроса VBA из .NET - приложения
« Ответ #13 : 21-11-2019, 11:48:07 »
sangvinik128,
Велосипед - это что-то типа ScriptPro: https://github.com/Viruaithal/ScriptPro
Его очень давно не обновляли. Так что возможно, что с последними версиями AutoCAD работать не будет, или будет работать плохо.
Не забывайте про правильное Форматирование кода на форуме
Создание и добавление Autodesk Screencast видео в сообщение на форуме
Если Вы задали вопрос и на форуме появился правильный ответ, то не забудьте про кнопку Решение

Оффлайн sangvinik128Автор темы

  • ADN OPEN
  • **
  • Сообщений: 87
  • Карма: 0
Re: Вызов макроса VBA из .NET - приложения
« Ответ #14 : 21-11-2019, 13:07:21 »
Хорошо. Спасибо Вам за советы !