Тема: Доступ к экземплярам AutoCAD 2007
Добрый день,
Возникла задача получения объекта интерфейса AcadApplication для каждого из нескольких одновременно запущенных экземпляров AutoCAD 2007 из внешнего приложения. С этой целью в ROT определялись все моникеры, содержание поля DisplayName которых соответствовало ClsID AutoCAD.Application.17, после чего связанные с ними объекты добавлялись в список. Ниже представлен код программы:
… using AutoCAD = Autodesk.AutoCAD.Interop; using System.Runtime.InteropServices.ComTypes; … [DllImport("ole32.dll")] extern static IntPtr CreateBindCtx(IntPtr reserved, out IBindCtx ppbc); … static void ListACADDocs() { IntPtr HRESULT; IBindCtx objCtx = null; HRESULT = CreateBindCtx(new IntPtr(0), out objCtx); IRunningObjectTable objRot = null; objCtx.GetRunningObjectTable(out objRot); IEnumMoniker RunningMonikers = null; objRot.EnumRunning(out RunningMonikers); RunningMonikers.Reset(); IntPtr pointerFetchedMonikers = IntPtr.Zero; IMoniker[] monikerContainer = new IMoniker[1]; String strDisplayName; Object COMObject = null; List<Object> colACADInstances = new List<Object>(); while (RunningMonikers.Next(1, monikerContainer, pointerFetchedMonikers) == 0) { monikerContainer[0].GetDisplayName(objCtx, null, out strDisplayName); objRot.GetObject(monikerContainer[0], out COMObject); //AutoCAD.Application.17 class ID: {28B7AA99-C0F9-4C47-995E-8A8D729603A1} if (strDisplayName == "!{28B7AA99-C0F9-4C47-995E-8A8D729603A1}") colACADInstances.Add(COMObject); } foreach (Object obj in colACADInstances) foreach(AutoCAD.AcadDocument doc in ((AutoCAD.AcadApplication)obj).Documents) Console.WriteLine(doc.FullName); }
Проблема заключается в том, что все объекты из списка colACADInstances соответствуют одному экземпляру AutoCAD.
Буду признателен за любую помощь в данном вопросе.