Не могу получить AcadApplication через COM.

Автор Тема: Не могу получить AcadApplication через COM.  (Прочитано 551 раз)

0 Пользователей и 1 Гость просматривают эту тему.

Оффлайн Gr.OmАвтор темы

  • ADN OPEN
  • Сообщений: 19
  • Карма: 0
Подскажите, пожалуйста, - как это правильно делается. Во всех примерах объект получают в таком виде:



Но 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 точно из нужного пространства:



Чего не хватает?

Оффлайн Александр Ривилис

  • Administrator
  • *****
  • Сообщений: 13933
  • Карма: 1794
  • Рыцарь ObjectARX
  • Skype: rivilis
Re: Не могу получить AcadApplication через COM.
« Ответ #1 : 29-10-2025, 19:50:15 »
Во всех примерах объект получают в таком виде:
Это ChatGPT такое предложил?
Не забывайте про правильное Форматирование кода на форуме
Создание и добавление Autodesk Screencast видео в сообщение на форуме
Если Вы задали вопрос и на форуме появился правильный ответ, то не забудьте про кнопку Решение

Оффлайн Gr.OmАвтор темы

  • ADN OPEN
  • Сообщений: 19
  • Карма: 0
Re: Не могу получить AcadApplication через COM.
« Ответ #2 : 29-10-2025, 19:58:20 »
Да нет, в разных источниках находил. В т.ч. вполне авторитетных)):


Оффлайн Александр Ривилис

  • Administrator
  • *****
  • Сообщений: 13933
  • Карма: 1794
  • Рыцарь ObjectARX
  • Skype: rivilis
Re: Не могу получить AcadApplication через COM.
« Ответ #3 : 29-10-2025, 20:04:32 »
На этом форуме и конкретно в этом разделе есть множество примеров получения и использования AcadApplication. Воспользуйся поиском.
Не забывайте про правильное Форматирование кода на форуме
Создание и добавление Autodesk Screencast видео в сообщение на форуме
Если Вы задали вопрос и на форуме появился правильный ответ, то не забудьте про кнопку Решение

Оффлайн Gr.OmАвтор темы

  • ADN OPEN
  • Сообщений: 19
  • Карма: 0
Re: Не могу получить AcadApplication через COM.
« Ответ #4 : 29-10-2025, 20:14:00 »
Как раз поиском трудно найти что-то дельное и относящееся к проблеме. К примеру поиск по "AcadApplication" дает ссылку на единственный пост:



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

AcadApplication COMApp = Application.AcadApplication as AcadApplication;
И еще, для общего развития.. Способ через Marshal.GetActiveObject, выходит, используется только в случаях получения Application из других приложений?

Оффлайн Александр Ривилис

  • Administrator
  • *****
  • Сообщений: 13933
  • Карма: 1794
  • Рыцарь ObjectARX
  • Skype: rivilis
Re: Не могу получить AcadApplication через COM.
« Ответ #5 : 29-10-2025, 22:00:18 »
И еще, для общего развития.. Способ через Marshal.GetActiveObject, выходит, используется только в случаях получения Application из других приложений?
Не только. В данном случае это лишнее внутри AutoCAD.
И что-то поиск у тебя плохо работает. Только в разделе .NET у меня нашлось 104 сообщения с AcadApplication.
Не забывайте про правильное Форматирование кода на форуме
Создание и добавление Autodesk Screencast видео в сообщение на форуме
Если Вы задали вопрос и на форуме появился правильный ответ, то не забудьте про кнопку Решение

Оффлайн Gr.OmАвтор темы

  • ADN OPEN
  • Сообщений: 19
  • Карма: 0
Re: Не могу получить AcadApplication через COM.
« Ответ #6 : 30-10-2025, 16:07:46 »
И что-то поиск у тебя плохо работает. Только в разделе .NET у меня нашлось 104 сообщения с AcadApplication.
Как правило ищу в гугле, а не через поисковик форма. А с ним действительно не сразу понял, как он работает. При поиске из страницы топика нашелся только один ответ, почему-то. А если выйти из темы, то норм.
Да и в целом, когда сталкиваешься с проблемой еще плохо понимаешь, какие ключевые слова нужно использовать.
Когда целый день проковырялся, выяснил проблему, тогда уже понимаешь, почему тип AcadApplication является ключевым:)
А так - куча разных вариантов (учитывая левые придумки AI-чатов) и без контекста или прямого пояснения не понятно, как точно должно быть.
В DevGuide так же про взаимодействие с COM только вскользь и без подробностей.

Оффлайн Александр Ривилис

  • Administrator
  • *****
  • Сообщений: 13933
  • Карма: 1794
  • Рыцарь ObjectARX
  • Skype: rivilis
Re: Не могу получить AcadApplication через COM.
« Ответ #7 : 30-10-2025, 16:46:22 »
При поиске из страницы топика нашелся только один ответ, почему-то.
Пользуйся этим поиском с выбором раздела или разделов и результаты в виде сообщений, а не тем.

Не забывайте про правильное Форматирование кода на форуме
Создание и добавление Autodesk Screencast видео в сообщение на форуме
Если Вы задали вопрос и на форуме появился правильный ответ, то не забудьте про кнопку Решение