Сообщество программистов Autodesk в СНГ
ADN Club => AutoCAD .NET API => Тема начата: 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/)
Чего не хватает?
-
Во всех примерах объект получают в таком виде:
Это ChatGPT такое предложил?
-
Да нет, в разных источниках находил. В т.ч. вполне авторитетных)):
(https://i.ibb.co/5X4n8yzL/image.png) (https://ibb.co/LDRJtWq1)
-
На этом форуме и конкретно в этом разделе есть множество примеров получения и использования AcadApplication. Воспользуйся поиском.
-
Как раз поиском трудно найти что-то дельное и относящееся к проблеме. К примеру поиск по "AcadApplication" дает ссылку на единственный пост:
(https://i.ibb.co/B2hJvXSz/image.png) (https://ibb.co/F4Q1cSjx)
Я кстати встречал этот вариант в другом источнике, но подумал, что получу им объект API, а не COM и не стал пробовать.
Правильно ли я понимаю, что изнутри автокада правильный и единственный способ именно такой:
AcadApplication COMApp = Application.AcadApplication as AcadApplication;
И еще, для общего развития.. Способ через Marshal.GetActiveObject, выходит, используется только в случаях получения Application из других приложений?
-
И еще, для общего развития.. Способ через Marshal.GetActiveObject, выходит, используется только в случаях получения Application из других приложений?
Не только. В данном случае это лишнее внутри AutoCAD.
И что-то поиск у тебя плохо работает. Только в разделе .NET у меня нашлось 104 сообщения с AcadApplication.
-
И что-то поиск у тебя плохо работает. Только в разделе .NET у меня нашлось 104 сообщения с AcadApplication.
Как правило ищу в гугле, а не через поисковик форма. А с ним действительно не сразу понял, как он работает. При поиске из страницы топика нашелся только один ответ, почему-то. А если выйти из темы, то норм.
Да и в целом, когда сталкиваешься с проблемой еще плохо понимаешь, какие ключевые слова нужно использовать.
Когда целый день проковырялся, выяснил проблему, тогда уже понимаешь, почему тип AcadApplication является ключевым:)
А так - куча разных вариантов (учитывая левые придумки AI-чатов) и без контекста или прямого пояснения не понятно, как точно должно быть.
В DevGuide так же про взаимодействие с COM только вскользь и без подробностей.
-
При поиске из страницы топика нашелся только один ответ, почему-то.
Пользуйся этим поиском с выбором раздела или разделов и результаты в виде сообщений, а не тем.
(https://i.ibb.co/ccf2SV1H/IMG-20251030-154231.jpg) (https://ibb.co/5Wpsgw6y)