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

ADN Club => AutoCAD .NET API => Тема начата: Gr.Om от 29-10-2025, 19:44:28

Название: Не могу получить AcadApplication через COM.
Отправлено: Gr.Om от 29-10-2025, 19:44:28
Подскажите, пожалуйста, - как это правильно делается. Во всех примерах объект получают в таком виде:

(https://i.ibb.co/LXfBVTcT/image.png) (https://ibb.co/ycJKHzZz)

Но VS стабильно пишет ошибку "Marshal" не содержит определение "GetActiveObject". Бьюсь полдня, перепробовал все рекомендации.
Подключил уже кучу всего в проект:

<Project Sdk="Microsoft.NET.Sdk">

  <PropertyGroup>
    <TargetFramework>net8.0</TargetFramework>
    <ImplicitUsings>enable</ImplicitUsings>
    <Nullable>enable</Nullable>
  </PropertyGroup>

  <ItemGroup>
    <COMReference Include="AutoCAD">
      <WrapperTool>tlbimp</WrapperTool>
      <VersionMinor>0</VersionMinor>
      <VersionMajor>1</VersionMajor>
      <Guid>4d6c720c-0525-4d94-841b-6d5378a564e2</Guid>
      <Lcid>0</Lcid>
      <Isolated>false</Isolated>
      <EmbedInteropTypes>true</EmbedInteropTypes>
    </COMReference>
    <COMReference Include="AXDBLib">
      <WrapperTool>tlbimp</WrapperTool>
      <VersionMinor>0</VersionMinor>
      <VersionMajor>1</VersionMajor>
      <Guid>0ea72311-df28-4318-a51b-92d7fc7df50b</Guid>
      <Lcid>0</Lcid>
      <Isolated>false</Isolated>
      <EmbedInteropTypes>true</EmbedInteropTypes>
    </COMReference>
  </ItemGroup>

  <ItemGroup>
    <Reference Include="accoremgd">
      <HintPath>..\..\..\CAD\NET\OARX\CDROM1\inc\AcCoreMgd.dll</HintPath>
      <Private>False</Private>
    </Reference>
    <Reference Include="Acdbmgd">
      <HintPath>..\..\..\CAD\NET\OARX\CDROM1\inc\AcDbMgd.dll</HintPath>
      <Private>False</Private>
    </Reference>
    <Reference Include="acmgd">
      <HintPath>..\..\..\CAD\NET\OARX\CDROM1\inc\AcMgd.dll</HintPath>
      <Private>False</Private>
    </Reference>
    <Reference Include="Autodesk.AutoCAD.Interop">
      <HintPath>..\..\..\CAD\NET\OARX\CDROM1\inc-x64\Autodesk.AutoCAD.Interop.dll</HintPath>
    </Reference>
    <Reference Include="Autodesk.AutoCAD.Interop.Common">
      <HintPath>..\..\..\CAD\NET\OARX\CDROM1\inc-x64\Autodesk.AutoCAD.Interop.Common.dll</HintPath>
    </Reference>
  </ItemGroup>

</Project>

Marshal точно из нужного пространства:

(https://i.ibb.co/Rk88YJGY/image.png) (https://imgbb.com/)

Чего не хватает?
Название: Re: Не могу получить AcadApplication через COM.
Отправлено: Александр Ривилис от 29-10-2025, 19:50:15
Во всех примерах объект получают в таком виде:
Это ChatGPT такое предложил?
Название: Re: Не могу получить AcadApplication через COM.
Отправлено: Gr.Om от 29-10-2025, 19:58:20
Да нет, в разных источниках находил. В т.ч. вполне авторитетных)):

(https://i.ibb.co/5X4n8yzL/image.png) (https://ibb.co/LDRJtWq1)
Название: Re: Не могу получить AcadApplication через COM.
Отправлено: Александр Ривилис от 29-10-2025, 20:04:32
На этом форуме и конкретно в этом разделе есть множество примеров получения и использования AcadApplication. Воспользуйся поиском.
Название: Re: Не могу получить AcadApplication через COM.
Отправлено: Gr.Om от 29-10-2025, 20:14:00
Как раз поиском трудно найти что-то дельное и относящееся к проблеме. К примеру поиск по "AcadApplication" дает ссылку на единственный пост:

(https://i.ibb.co/B2hJvXSz/image.png) (https://ibb.co/F4Q1cSjx)

Я кстати встречал этот вариант в другом источнике, но подумал, что получу им объект API, а не COM и не стал пробовать.
Правильно ли я понимаю, что изнутри автокада правильный и единственный способ именно такой:

AcadApplication COMApp = Application.AcadApplication as AcadApplication;
И еще, для общего развития.. Способ через Marshal.GetActiveObject, выходит, используется только в случаях получения Application из других приложений?
Название: Re: Не могу получить AcadApplication через COM.
Отправлено: Александр Ривилис от 29-10-2025, 22:00:18
И еще, для общего развития.. Способ через Marshal.GetActiveObject, выходит, используется только в случаях получения Application из других приложений?
Не только. В данном случае это лишнее внутри AutoCAD.
И что-то поиск у тебя плохо работает. Только в разделе .NET у меня нашлось 104 сообщения с AcadApplication.
Название: Re: Не могу получить AcadApplication через COM.
Отправлено: Gr.Om от 30-10-2025, 16:07:46
И что-то поиск у тебя плохо работает. Только в разделе .NET у меня нашлось 104 сообщения с AcadApplication.
Как правило ищу в гугле, а не через поисковик форма. А с ним действительно не сразу понял, как он работает. При поиске из страницы топика нашелся только один ответ, почему-то. А если выйти из темы, то норм.
Да и в целом, когда сталкиваешься с проблемой еще плохо понимаешь, какие ключевые слова нужно использовать.
Когда целый день проковырялся, выяснил проблему, тогда уже понимаешь, почему тип AcadApplication является ключевым:)
А так - куча разных вариантов (учитывая левые придумки AI-чатов) и без контекста или прямого пояснения не понятно, как точно должно быть.
В DevGuide так же про взаимодействие с COM только вскользь и без подробностей.
Название: Re: Не могу получить AcadApplication через COM.
Отправлено: Александр Ривилис от 30-10-2025, 16:46:22
При поиске из страницы топика нашелся только один ответ, почему-то.
Пользуйся этим поиском с выбором раздела или разделов и результаты в виде сообщений, а не тем.

(https://i.ibb.co/ccf2SV1H/IMG-20251030-154231.jpg) (https://ibb.co/5Wpsgw6y)