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

26/07/2016

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

Код ниже показывает процедуру загрузки и выполнения VBA-макроса из .NET сборки. Здесь используются методы LoadDVB и RunMacro из AutoCAD ActiveX API. Так как код использует ключевое слово dynamic (или Reflection), то отпадает необходимость подключать ссылки к AutoCAD ActiveX (interop) модулям.

Код - C#: [Выделить]
  1. using System;
  2. using System.Reflection;
  3. using Autodesk.AutoCAD.Runtime;
  4. using Autodesk.AutoCAD.ApplicationServices;
  5. using Autodesk.AutoCAD.DatabaseServices;
  6. using Autodesk.AutoCAD.Geometry;
  7. using Autodesk.AutoCAD.EditorInput;
  8.  
  9. // This line is not mandatory, but improves loading performances
  10. [assembly: CommandClass(typeof(RunVBA.MyCommands))]
  11.  
  12. namespace RunVBA
  13. {
  14.   public class MyCommands
  15.   {
  16.     [CommandMethod("LoadRunVBA")]
  17.     public static void MyCmd()
  18.     {
  19.       dynamic acadApplication = Application.AcadApplication;
  20.       acadApplication.LoadDVB(@"C:\cases\area.dvb");
  21.       acadApplication.RunMacro("mytest");
  22.     }
  23.  
  24.     [CommandMethod("LoadRunVBA_reflection")]
  25.     public static void LoadDVBFile_ref()
  26.     {
  27.       LoadDVBFile(@"C:\cases\area.dvb");
  28.       RunMacro("mytest");
  29.     }
  30.  
  31.     public static void LoadDVBFile(string path)
  32.     {
  33.       object acadApplication = Application.AcadApplication;
  34.       acadApplication.GetType().InvokeMember("LoadDVB", BindingFlags.InvokeMethod, null,
  35.         acadApplication, new object[] { path });
  36.     }
  37.     public static void RunMacro(string macro)
  38.     {
  39.       object acadApplication = Application.AcadApplication;
  40.       acadApplication.GetType().InvokeMember("RunMacro", BindingFlags.InvokeMethod, null,
  41.         acadApplication, new object[] { macro });
  42.     }
  43.   }
  44. }
  45.  

 

По мотивам: http://adndevblog.typepad.com/autocad/2016/07/load-and-run-vba-macro-through-net-command.html

Автор перевода: Александр Ривилис

Обсуждение: http://adn-cis.org/forum/index.php?topic=7238

Опубликовано 26.07.2016