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

ADN Club => AutoCAD .NET API => Тема начата: Volody1983 от 07-01-2016, 14:26:48

Название: Перекомпиляция приложения .net под автокад 2012 и выше
Отправлено: Volody1983 от 07-01-2016, 14:26:48
Добрый день!
В свое время писал приложение, работающее под Acad MEP 2009 - 2011. Acad MEP в смысле того, что приложение активно использовало его API. Возникла потребность перекомпилировать под более свежую версию, выше 2011. Но так как навыки (с 2011) были утеряны, столкнулся с сложностями. Может кто подскажет с чего начать?
Название: Re: Перекомпиляция приложения .net под автокад 2012 и выше
Отправлено: Андрей Бушман от 07-01-2016, 14:43:29
Но так как навыки (с 2011) были утеряны, столкнулся с сложностями. Может кто подскажет с чего начать?
С обозначения сложностей.
Название: Re: Перекомпиляция приложения .net под автокад 2012 и выше
Отправлено: Volody1983 от 07-01-2016, 15:27:16
Андрей самые начальные вопросы (я около пяти лет был далек от программирования):
1. Проект писался в 2008 студии. Есть смысл ставить что-то новее для 2015 автокада? Раньше по-моему версия студии для net приложение была не важна. По крайней мере для 2009-2010(11) я компилировал в 2008 студии.
2. А самое нужное это помощь в ссылке для понимания того, что автодеск в 2012 версии что-то изменил в ядре, а апи для платформы начиная с 2012 версии растащено на более чем две DLL.
Андрей прошу отнестись с пониманием, т.к. знаю что у Вас такие вопросы могут вызвать эмоции.
Название: Re: Перекомпиляция приложения .net под автокад 2012 и выше
Отправлено: Андрей Бушман от 07-01-2016, 15:31:55
а апи для платформы начиная с 2012 версии растащено на более чем две DLL.
не с 2012, а с 2013. В виду этого существует вероятность того, что твой код, скомпилированный под 2011-й будет работать и в 2012-м акаде. Основная масса моих программ скомпилирована под 2009 и успешно работает вплоть до 2012-го акада. Перекомпиляция требуется для 2013-го акада. Нужно в референсы добавить ссылку на accoremgd.dll. Не исключено, что результат будет работать не только в 2013-м но и в более новых.
Название: Re: Перекомпиляция приложения .net под автокад 2012 и выше
Отправлено: Volody1983 от 07-01-2016, 15:37:06
Андрей, а студию имеет смысл более новую ставить?
Название: Re: Перекомпиляция приложения .net под автокад 2012 и выше
Отправлено: Андрей Бушман от 07-01-2016, 15:38:54
Андрей, а студию имеет смысл более новую ставить?
Если используемая тобой IDE поддерживает работу с нужной тебе версией .NET Framework, то можно обойтись и без более новой.
Название: Re: Перекомпиляция приложения .net под автокад 2012 и выше
Отправлено: Андрей Бушман от 07-01-2016, 15:40:44
http://bushman-andrey.blogspot.ru/2014/04/net-autocad-net-framework-ms-visual.html
Название: Re: Перекомпиляция приложения .net под автокад 2012 и выше
Отправлено: Volody1983 от 07-01-2016, 15:52:31
Андрей действительно в 2012 ACAD MEP мое приложение работает, но компилировал его я в 2008 студии (NET 3.5 sp1). Что противоречить информации с ссылке выше, а именно "[R18.2] AutoCAD 2012: .NET 4.0, 4.5, 4.5.1 (см. примечание 2); Visual Studio 2010 и более новые." Может это опечатка?
Название: Re: Перекомпиляция приложения .net под автокад 2012 и выше
Отправлено: Андрей Бушман от 07-01-2016, 15:57:54
Что противоречить информации с ссылке выше
Не противоречит. По ссылке указаны системные требования для компиляции под указанные версии акада. Возможность компиляции и возможность загрузки уже скомпилированного (под более ранние версии акада) - это не одно и то же. Например, в акад 2012 может быть загружен плагин, скомпилированный под 2009-й акад.  Но для того, чтобы скомпилировать код под акад 2012, необходимо чтобы выполнялись условия для 2012-го акада, обозначенные по ссылке.
Название: Re: Перекомпиляция приложения .net под автокад 2012 и выше
Отправлено: Андрей Бушман от 07-01-2016, 16:08:10
Например, здесь (https://bitbucket.org/Andrey-Bushman/profile-via-points/wiki/Home) один и тот же код скомпилирован дважды: для 2009-го акада и для 2013-го. В результате получены две библиотеки: `pvp.R17.2.dll` и `pvp.R19.0.dll`. Первая из них грузится в акады 2009-2012, а второй - во все более новые версии акада. Т.о. нет смысла компилировать код под все существующие версии акада - нередко достаточно двух (если не планируется использовать специфическую для более новой версии акада функциональность).
Название: Re: Перекомпиляция приложения .net под автокад 2012 и выше
Отправлено: Volody1983 от 07-01-2016, 16:31:24
Андрей большое спасибо за инфу, буду пробовать перекомпилировать.
Название: Re: Перекомпиляция приложения .net под автокад 2012 и выше
Отправлено: Volody1983 от 10-01-2016, 14:36:23
В продолжению к разговору. Пробую компилировать приложение под акад 2013. Среду поставил .net 4. Обновил ссылки на acmgd, acdbmgd, добавил accoremgd, обновил ссылки на API MEP(ACA). Но теперь все конструкции типа:
Using userInteraction As EditorUserInteraction = ed.StartUserInteraction(Me)
End Using
Выдают ошибку:
"Ошибка   10   Не удалось разрешить перегрузку, так как ни один доступный "StartUserInteraction" не может быть вызван с данными аргументами:
    'Public Function StartUserInteraction(window As System.Windows.Window) As Autodesk.AutoCAD.EditorInput.EditorUserInteraction': Невозможно преобразовать значение типа "Sb.Plugin.CableLeaderUtilForm" в "System.Windows.Window".
    'Public Function StartUserInteraction(hwnd As System.IntPtr) As Autodesk.AutoCAD.EditorInput.EditorUserInteraction': Невозможно преобразовать значение типа "Sb.Plugin.CableLeaderUtilForm" в "System.IntPtr".
"
Вспоминаю, что конструкция была необходима для выбора мышкой из модального окна. Может кто подскажет, что поменялось в версии 2013 и выше?
Название: Re: Перекомпиляция приложения .net под автокад 2012 и выше
Отправлено: Дима_ от 10-01-2016, 14:42:29
Вначале проверь именные пространства (то ли ты вызываешь), затем не изменились-ли перегрузки метода - такое в "автокадах" бывает.
Название: Re: Перекомпиляция приложения .net под автокад 2012 и выше
Отправлено: Volody1983 от 10-01-2016, 14:46:19
Все оказалось проще. Достаточно поправить Me на Me.Handle
Название: Re: Перекомпиляция приложения .net под автокад 2012 и выше
Отправлено: Volody1983 от 10-01-2016, 14:55:51
Еще одна ошибка осталась в функции сохранения через COM:
    Friend Shared Sub SaveDocument(ByVal Doc As Document)
             Dim oAcadDoc As Object = Doc.AcadDocument
        oAcadDoc.[GetType]().InvokeMember("Save", Reflection.BindingFlags.InvokeMethod, Nothing, oAcadDoc, Nothing)
    End Sub
В 2013 не работает. Непонятно пока, что они нахимичили и чем заменить.
Название: Re: Перекомпиляция приложения .net под автокад 2012 и выше
Отправлено: Дима_ от 10-01-2016, 15:11:56
SaveAs()
Название: Re: Перекомпиляция приложения .net под автокад 2012 и выше
Отправлено: Volody1983 от 10-01-2016, 16:17:59
Хотелось бы конечно старую функцию оживить.
Название: Re: Перекомпиляция приложения .net под автокад 2012 и выше
Отправлено: Volody1983 от 10-01-2016, 17:48:02
Все получилось в 2013 работает. Потребовалось добавить
Imports Autodesk.AutoCAD.ApplicationServices.DocumentExtensionВместо AcadDocument  поставить GetAcadDocument