Сообщество программистов Autodesk в СНГ

ADN Club => VBA => Тема начата: Agens от 25-04-2014, 11:05:16

Название: VBA <-> VB.NET
Отправлено: Agens от 25-04-2014, 11:05:16
Можно ли каким-нибудь способом осуществить связь этих двух приложение в AutoCAD?
(использовать открытые функции, методы, подключать модули)
Спасибо...
Название: Re: VBA <-> VB.NET
Отправлено: Александр Ривилис от 25-04-2014, 18:55:09
Теоретически думаю что можно, а вот практически очень сложно. Подумай над другими вариантами. Думаю, что оптимальным будет переписать весь код VBA на VB.NET
Название: Re: VBA <-> VB.NET
Отправлено: Agens от 16-05-2014, 10:26:36
Как-то очень уж долго VBA умирает...
Название: Re: VBA <-> VB.NET
Отправлено: Windcastle от 28-08-2015, 19:18:21
Пока не изучу C# не хотел бы, чтобы он сдох! AutoCAD 2016 его поддерживает. Значит можно спать спокойно еще пару лет... и изучать C#.
Название: Re: VBA <-> VB.NET
Отправлено: Agens от 30-08-2015, 15:43:05
Windcastle, как-то долго Вы собираетесь его изучать :)
Название: Re: VBA <-> VB.NET
Отправлено: Алексей Кулик от 30-08-2015, 23:08:49
Пофлудить, что ли )))
Название: Re: VBA <-> VB.NET
Отправлено: Пашин Евгений от 31-08-2015, 06:46:47
Windcastle, как-то долго Вы собираетесь его изучать :)

Как можно быстрее! Планирую в 2016 году стать уверенным (если не профессиональным) пользователем.
Название: Re: VBA <-> VB.NET
Отправлено: Agens от 31-08-2015, 10:48:08
Алексей Кулик, в темах о VBA и такие сообщения - информация, т.е. темы "мертвые"...
Пашин Евгений, но все же пользователем...
Название: Re: VBA <-> VB.NET
Отправлено: Алексей Кулик от 31-08-2015, 11:11:32
Off-Topic: показать
Да вопрос не в том, мертвые темы или нет. Вопрос в другом :)
Сугубо ИМХО: пока не будет хоть какой-то внятной задачи, "всухую" изучать язык - интересно, но не результативно. Сейчас Андрей Бушман и Александр Ривилис за эти слова мне навешают ;)
Есть код на VBA? Отлично! В онлайн-справке часто есть примеры, как один и тот же код выглядит на VBA, VB.NET и C#. Осуществить "перевод" даже вручную не так уж и сложно. Если грубо, то: надо добавить новый слой (для упрощения задачи снимаем вопрос проверки - а вдруг слой уже есть)? Ок, на VBA это нечто типа ThisDrawing.Layers.Add, на .NET придется открыть сначала текущий документ, потом таблицу слоев в режиме "чтение и запись", потом добавить новый элемент, настроить его и добавить этот элемент в таблицу слоев. Ну и зафиксировать изменения.
Да, VBA проще и код писать там быстрее, но некоторые вещи там не сделать в принципе (точно так же, как и в lisp'e).
Название: Re: VBA <-> VB.NET
Отправлено: Agens от 31-08-2015, 13:08:16
Алексей Кулик, поэтому я и создал тему, для меня проще написать интерфейс на C#, а обработку объектов AutoCAD на VBA. Но никто так и не ответил, как подключить VBA к С# или VB и пользоваться открытыми функциями из C#, написанными на VBA.
Название: Re: VBA <-> VB.NET
Отправлено: Александр Ривилис от 31-08-2015, 13:31:09
Но никто так и не ответил, как подключить VBA к С# или VB и пользоваться открытыми функциями из C#, написанными на VBA.
Просто такой возможности нет. Ну нельзя вызвать код VBA из C#. Точнее нельзя получить результат вызова этого кода. А вызвать код можно:
Код - C# [Выбрать]
  1. Application.AcadApplication.RunMacro("макро_код");
Цитировать
Runs a VBA macro from the Application object.

See Also | Example

Signature

object.RunMacro MacroPath

Object

Application
The object this method applies to.

MacroPath

String; input-only
A string representing the calling sequence of the macro to run. The calling sequence must have the following syntax, where [] represent optional parameters:

[Filename.dvb.][ProjectName.][ModuleName.]MacroName

NOTE: If Filename.dvb is followed by ProjectName, separate the names with an exclamation point instead of a period, as in the following example:

Filename.dvb!ProjectName


The Filename.dvb specified will be loaded if it is not already loaded. If the path to the Filename.dvb is not specified, the AutoCAD search path is searched to locate the file. If ProjectName is not specified, all currently loaded projects are searched to locate the macro.


Не знаю насколько это тебе поможет.
Название: Re: VBA <-> VB.NET
Отправлено: Алексей Кулик от 31-08-2015, 13:41:09
Если я правильно понимаю, такой вариант сработает только при использовании Interop. Или я ошибаюсь?
Название: Re: VBA <-> VB.NET
Отправлено: Александр Ривилис от 31-08-2015, 13:41:18
Кстати, очень интересная табличка: Сравнение VBA/VB с VB.NET и C# (.NET) (http://knowledge.autodesk.com/support/autocad-civil-3d/downloads/caas/CloudHelp/cloudhelp/2016/ENU/AutoCAD-NET/files/GUID-C4B063BA-EAAA-430F-BDB5-2C48F1D897E4-htm.html)
Название: Re: VBA <-> VB.NET
Отправлено: Александр Ривилис от 31-08-2015, 13:42:16
Или я ошибаюсь?
Можно и через Reflection и тогда Interop подключать не нужно.