Тема: Доступ к экземплярам 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.

Буду признателен за любую помощь в данном вопросе.

Re: Доступ к экземплярам AutoCAD 2007

Владимир Трифонов пишет:

Возникла задача получения объекта интерфейса AcadApplication для каждого из нескольких одновременно запущенных экземпляров AutoCAD 2007 из внешнего приложения.

Если не секрет, для чего запускаете сразу несколько acad.exe?

Re: Доступ к экземплярам AutoCAD 2007

Hwd пишет:
Владимир Трифонов пишет:

Возникла задача получения объекта интерфейса AcadApplication для каждого из нескольких одновременно запущенных экземпляров AutoCAD 2007 из внешнего приложения.

Если не секрет, для чего запускаете сразу несколько acad.exe?

У пользователей настроено несколько конфигураций (cui-файлов), загружающих различные наборы ARX-приложений.
Несколько экземпляров acad.exe обычно запускаются при работе с двумя и более конфигурациями одновременно.

Re: Доступ к экземплярам AutoCAD 2007

Владимир Трифонов пишет:

Несколько экземпляров acad.exe обычно запускаются при работе с двумя и более конфигурациями одновременно.

Зачем? Почему не сделать общий CUI и не грузить общий набор ARX?

Re: Доступ к экземплярам AutoCAD 2007

Hwd пишет:

Зачем? Почему не сделать общий CUI и не грузить общий набор ARX?

Разделение на несколько CUI было выполнено, в первую очередь, из-за огромного количества элементов оконного меню. С другой стороны, при работе с AutoCAD в различных подразделениях организации требуется только часть из всего набора ARX-приложений.

Re: Доступ к экземплярам AutoCAD 2007

Бесплатные видео-уроки по работе в AutoCAD

http://store.techcourses.ru/ad/152929/

Re: Доступ к экземплярам AutoCAD 2007

Таких на dwg.ru банят сразу.

Re: Доступ к экземплярам AutoCAD 2007

ксения цветкова пишет:

Таких на dwg.ru банят сразу.

Лёша то ли пожурил, то ли двг.ру пропиарил ;)