Hello, World на AutoCAD .NET DLL
| Правила | Регистрация | Пользователи | Сообщения за день |  Справка по форуму | Файлообменник |

Вернуться   Форум DWG.RU > Программное обеспечение > Программирование > .NET > Hello, World на AutoCAD .NET DLL

Hello, World на AutoCAD .NET DLL

Ответ
Поиск в этой теме
Непрочитано 06.04.2012, 12:18 #1
Hello, World на AutoCAD .NET DLL
Дмитрий Асташев
 
päällikön suunnittelijat
 
Pietari, Venäjä
Регистрация: 04.12.2010
Сообщений: 63

Коллеги, позвольте открыть новую тему по освоению AutoCAD .NET API DLL
Это многим должно быть интересно. Как правило, первый - шаг самый сложный.

Первый вопрос: в презентации http://images.autodesk.com/emea_apac...12-russian.zip упоминаются папки inc, inc-win32, inc-x64, samples.
Где их взять? Если они различны для разных версий, то где взять для 2009?

При пошаговом воспроизведении примера Lab1 из архива и попытке загрузки в AutoCAD выдается сообщение
Cannot load assembly. Error details: System.BadImageFormatException: Could not
load file or assembly 'file:///D:\XXXX\XXXX.dll' or one of
its dependencies. This assembly is built by a runtime newer than the currently
loaded runtime and cannot be loaded.
File name: 'file:///D:\XXXX\XXXX.dll'
at System.Reflection.Assembly._nLoad(AssemblyName fileName, String codeBase,
Evidence assemblySecurity, Assembly locationHint, StackCrawlMark& stackMark,
Boolean throwOnFileNotFound, Boolean forIntrospection)
at System.Reflection.Assembly.InternalLoad(AssemblyName assemblyRef,
Evidence assemblySecurity, StackCrawlMark& stackMark, Boolean forIntrospection)
at System.Reflection.Assembly.LoadFrom(String assemblyFile)
at Autodesk.AutoCAD.Runtime.ExtensionLoader.Load(String fileName)
at loadmgd()
В системе Framework 4.0

Последний раз редактировалось Дмитрий Асташев, 06.04.2012 в 12:28.
Просмотров: 9275
 
Непрочитано 06.04.2012, 12:52
1 | #2
Stierlitz

В строительном проектировании с 05.10.2004
 
Регистрация: 01.05.2008
Новосибирск
Сообщений: 5,220


могу ошибаться, но фреймворки не заменяемы старшей версией

в разговоре с одним программистом как-то выяснил
Stierlitz вне форума  
 
Автор темы   Непрочитано 06.04.2012, 13:11
#3
Дмитрий Асташев

päällikön suunnittelijat
 
Регистрация: 04.12.2010
Pietari, Venäjä
Сообщений: 63


guliaevskij
компиляция с использованием Framework 3.5 предупреждений не дает, но и не помогает, сообщение об ошибке при загрузке остается.

При использовании более ранних версий Framework появляются предупреждения типа:

Цитата:
vbc : warning BC40057: Namespace or type specified in the project-level Imports 'System.Xml.Linq' doesn't contain any public member or cannot be found. Make sure the namespace or the type is defined and contains at least one public member. Make sure the imported element name doesn't use any aliases.
vbc : warning BC40057: Namespace or type specified in the project-level Imports 'System.Linq' doesn't contain any public member or cannot be found. Make sure the namespace or the type is defined and contains at least one public member. Make sure the imported element name doesn't use any aliases.
C:\Windows\Microsoft.NET\Framework\v4.0.30319\Microsoft.Common.targets(1360,9): warning MSB3267: The primary reference "System.Core", which is a framework assembly, could not be resolved in the currently targeted framework. ".NETFramework,Version=v3.0". To resolve this problem, either remove the reference "System.Core" or retarget your application to a framework version which contains "System.Core".
C:\Windows\Microsoft.NET\Framework\v4.0.30319\Microsoft.Common.targets(1360,9): warning MSB3268: The primary reference "System.Xml.Linq" could not be resolved because it has an indirect dependency on the framework assembly "System.Core, Version=3.5.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" which could not be resolved in the currently targeted framework. ".NETFramework,Version=v3.0". To resolve this problem, either remove the reference "System.Xml.Linq" or retarget your application to a framework version which contains "System.Core, Version=3.5.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089".
C:\Windows\Microsoft.NET\Framework\v4.0.30319\Microsoft.Common.targets(1360,9): warning MSB3268: The primary reference "System.Data.DataSetExtensions" could not be resolved because it has an indirect dependency on the framework assembly "System.Core, Version=3.5.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" which could not be resolved in the currently targeted framework. ".NETFramework,Version=v3.0". To resolve this problem, either remove the reference "System.Data.DataSetExtensions" or retarget your application to a framework version which contains "System.Core, Version=3.5.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089".
C:\Windows\Microsoft.NET\Framework\v4.0.30319\Microsoft.Common.targets(1360,9): warning MSB3267: The primary reference "System.Xml.Linq", which is a framework assembly, could not be resolved in the currently targeted framework. ".NETFramework,Version=v3.0". To resolve this problem, either remove the reference "System.Xml.Linq" or retarget your application to a framework version which contains "System.Xml.Linq".
C:\Windows\Microsoft.NET\Framework\v4.0.30319\Microsoft.Common.targets(1360,9): warning MSB3267: The primary reference "System.Data.DataSetExtensions", which is a framework assembly, could not be resolved in the currently targeted framework. ".NETFramework,Version=v3.0". To resolve this problem, either remove the reference "System.Data.DataSetExtensions" or retarget your application to a framework version which contains "System.Data.DataSetExtensions".
ошибка при загрузке остается.

Последний раз редактировалось Кулик Алексей aka kpblc, 06.04.2012 в 15:18.
Дмитрий Асташев вне форума  
 
Непрочитано 06.04.2012, 13:37
1 | #4
Кулик Алексей aka kpblc
Moderator

LISP, C# (ACAD 200[9,12,13,14])
 
Регистрация: 25.08.2003
С.-Петербург
Сообщений: 40,409


*mgd.dll из нормального AutoCAD'a подключены? И им установлено copylocal = false?
Цитата:
Сообщение от Дмитрий Асташев Посмотреть сообщение
поминаются папки inc, inc-win32, inc-x64, samples.
Из ObjectARX SDK. Хотя для .net-разработки нужны прежде всего acdbmgd.dll и acmgd.dll, насколько я помню.
Цитата:
Сообщение от Дмитрий Асташев Посмотреть сообщение
где взять для 2009?
В каталоге установки AutoCAD 2009.
Андрей Бушман (hwd) где-то писал насчет использования .NET 4.0 внутри AutoCAD, требующих более ранние версии .NET.
__________________
Моя библиотека lisp-функций
---
Обращение ко мне - на "ты".
Все, что сказано - личное мнение.
Кулик Алексей aka kpblc вне форума  
 
Непрочитано 06.04.2012, 14:30
1 | #5
hwd

C, C++, C#
 
Регистрация: 07.10.2009
С-Пб.
Сообщений: 2,762
Отправить сообщение для hwd с помощью Skype™


Цитата:
Сообщение от Кулик Алексей aka kpblc Посмотреть сообщение
Андрей Бушман (hwd) где-то писал насчет использования .NET 4.0 внутри AutoCAD, требующих более ранние версии .NET.
О версиях .Net Framework, об отладке (см. п.5).
__________________
Надеюсь, ты не социальный овощ? Это определяется делами! :welcome:
hwd вне форума  
 
Автор темы   Непрочитано 06.04.2012, 14:46
#6
Дмитрий Асташев

päällikön suunnittelijat
 
Регистрация: 04.12.2010
Pietari, Venäjä
Сообщений: 63


Цитата:
Сообщение от Кулик Алексей aka kpblc Посмотреть сообщение
mgd.dll из нормального AutoCAD'a подключены? И им установлено copylocal = false?
да, установлены acmgd.dll и acdbmgd.dll из C:\Program Files\AutoCAD 2009\
copylocal = false установлено.
Цитата:
Сообщение от Кулик Алексей aka kpblc Посмотреть сообщение
Из ObjectARX SDK.
на странице SDK http://usa.autodesk.com/adsk/servlet...3112&id=785550 можно получить SDK только для версий, начиная с 2011.
Где можно взять SDK для более ранних версий?
Цитата:
Сообщение от Кулик Алексей aka kpblc Посмотреть сообщение
В каталоге установки AutoCAD 2009
Там ничего похожего не нашел.
Дмитрий Асташев вне форума  
 
Непрочитано 06.04.2012, 17:10
1 | #7
Александр Ривилис

программист, рыцарь ObjectARX
 
Регистрация: 09.05.2005
Киев
Сообщений: 2,413
Отправить сообщение для Александр Ривилис с помощью Skype™


Цитата:
Сообщение от Дмитрий Асташев Посмотреть сообщение
Где можно взять SDK для более ранних версий?
Здесь.
Александр Ривилис вне форума  
 
Автор темы   Непрочитано 06.04.2012, 17:56
#8
Дмитрий Асташев

päällikön suunnittelijat
 
Регистрация: 04.12.2010
Pietari, Venäjä
Сообщений: 63


Спасибо, Александр!
Там написано, что нужна Visual Studio 2005 SP1 Будет ли работать с Visual Studio 2010?
Дмитрий Асташев вне форума  
 
Непрочитано 06.04.2012, 18:02
1 | #9
Александр Ривилис

программист, рыцарь ObjectARX
 
Регистрация: 09.05.2005
Киев
Сообщений: 2,413
Отправить сообщение для Александр Ривилис с помощью Skype™


Цитата:
Сообщение от Дмитрий Асташев Посмотреть сообщение
Там написано, что нужна Visual Studio 2005 SP1 Будет ли работать с Visual Studio 2010?
VS 2005 SP1 нужна для чистого ObjectARX (т.е. native C++), а не для .NET API
Александр Ривилис вне форума  
 
Автор темы   Непрочитано 06.04.2012, 19:33
#10
Дмитрий Асташев

päällikön suunnittelijat
 
Регистрация: 04.12.2010
Pietari, Venäjä
Сообщений: 63


Переустановил библиотеки из
C:\ObjectARX 2009\inc-x64\AcMgd.dll
C:\ObjectARX 2009\inc-x64\AcDbMgd.dll
copylocal = false установлено.
Framework 3.5
AutoCAD 2009
Visual Studio 2010
эффект тот же: сообщение "This assembly is built by a runtime newer than the currently
loaded runtime and cannot be loaded."
После чего устанавливаем разрешение на запись C:\Program Files\AutoCAD 2009\acad.exe.config
вносим изменения в acad.exe.config
как описано в https://sites.google.com/site/bushmansnetlaboratory/faq
то есть устанавливаем
<supportedRuntime version="v3.5"/>
И происходит чудо!

Здравствуй, Мир!

Спасибо всем. Продолжение следует.

Последний раз редактировалось Дмитрий Асташев, 06.04.2012 в 19:57.
Дмитрий Асташев вне форума  
 
Непрочитано 07.04.2012, 15:24
1 | #11
hwd

C, C++, C#
 
Регистрация: 07.10.2009
С-Пб.
Сообщений: 2,762
Отправить сообщение для hwd с помощью Skype™


Цитата:
Сообщение от Дмитрий Асташев Посмотреть сообщение
Продолжение следует.
и это пугает...
__________________
Надеюсь, ты не социальный овощ? Это определяется делами! :welcome:
hwd вне форума  
 
Автор темы   Непрочитано 04.09.2012, 19:29
#12
Дмитрий Асташев

päällikön suunnittelijat
 
Регистрация: 04.12.2010
Pietari, Venäjä
Сообщений: 63


2013 требует еще AcCoreMgd, который лежит в ....\ObjectARX 2013\inc\AcCoreMgd.dll
Дмитрий Асташев вне форума  
 
Непрочитано 04.09.2012, 23:16
#13
Modis


 
Регистрация: 12.06.2010
Липецк, Москва
Сообщений: 534


Дмитрий Асташев, А зачем вообще нужно качать ObjectARX SDK? Если только для "посмотреть примеры"
З.Ы. С вопросами (да и поиском готовых ответов) по .Net лучше сюда - там больше инфы, хотя здесь больше пользователей. ИМХО
Modis вне форума  
 
Автор темы   Непрочитано 05.09.2012, 00:49
#14
Дмитрий Асташев

päällikön suunnittelijat
 
Регистрация: 04.12.2010
Pietari, Venäjä
Сообщений: 63


Цитата:
Сообщение от Modis Посмотреть сообщение
А зачем вообще нужно качать ObjectARX SDK?
Хм. Хороший вопрос.
Во-первых, там презентация есть, по крайней мере, для первых шагов все расписано.
Во-вторых, там лежат исходники, которые можно поковырять.
В-третьих, там лежат файлы acdbmgd.dll и acmgd.dll которые, здесь могу ошибиться, чем-то отличаются одноименных из корня Акада.
Спасибо за приглашение, Modis!
Дмитрий Асташев вне форума  
 
Непрочитано 05.09.2012, 00:55
#15
Modis


 
Регистрация: 12.06.2010
Липецк, Москва
Сообщений: 534


Цитата:
Сообщение от Дмитрий Асташев Посмотреть сообщение
Во-первых, там презентация есть, по крайней мере, для первых шагов все расписано.
Во-вторых, там лежат исходники, которые можно поковырять.
Ну это как я и сказал - "посмотреть примеры"
Цитата:
Сообщение от Дмитрий Асташев Посмотреть сообщение
В-третьих, там лежат файлы acdbmgd.dll и acmgd.dll которые, здесь могу ошибиться, чем-то отличаются одноименных из корня Акада.
Ну-ну-ну! Фу! Такие гадости говорить нельзя!!! Ладно, глумлюсь - я не профи, но не трудно догадаться, что ничем они не отличаются ))
Modis вне форума  
 
Непрочитано 05.09.2012, 01:07
#16
Кулик Алексей aka kpblc
Moderator

LISP, C# (ACAD 200[9,12,13,14])
 
Регистрация: 25.08.2003
С.-Петербург
Сообщений: 40,409


Насколько я помню, как раз отличаются - в ObjectARX фактически стоят "заглушки", а в AutoCAD - реальные dll.
Могу ошибаться
__________________
Моя библиотека lisp-функций
---
Обращение ко мне - на "ты".
Все, что сказано - личное мнение.
Кулик Алексей aka kpblc вне форума  
 
Непрочитано 05.09.2012, 01:10
#17
Modis


 
Регистрация: 12.06.2010
Липецк, Москва
Сообщений: 534


Цитата:
Сообщение от Кулик Алексей aka kpblc Посмотреть сообщение
Насколько я помню, как раз отличаются - в ObjectARX фактически стоят "заглушки", а в AutoCAD - реальные dll.
Могу ошибаться
А зачем тогда в SDK делать файлы, отличные от акадовских, если dll'ка будет работать именно с акадовскими?
Нет, я не спорю - может и отличаются, просто моя логика сломалась
Modis вне форума  
 
Автор темы   Непрочитано 05.09.2012, 06:11
#18
Дмитрий Асташев

päällikön suunnittelijat
 
Регистрация: 04.12.2010
Pietari, Venäjä
Сообщений: 63


Цитата:
Сообщение от Modis Посмотреть сообщение
А зачем тогда в SDK делать файлы, отличные от акадовских, если dll'ка будет работать именно с акадовскими?
Заменил референсы файлами из акад. Все работает точно так же.
Цитата:
Сообщение от Кулик Алексей aka kpblc Посмотреть сообщение
в ObjectARX фактически стоят "заглушки", а в AutoCAD - реальные dll.
Сравнил бинарно. В поставке SDK файлы чуть менее чем полностью пустые. AcMgd имеет еще и другой тип EOL.
Коллеги, вы оба правы
Дмитрий Асташев вне форума  
 
Непрочитано 05.09.2012, 09:06
#19
Александр Ривилис

программист, рыцарь ObjectARX
 
Регистрация: 09.05.2005
Киев
Сообщений: 2,413
Отправить сообщение для Александр Ривилис с помощью Skype™


Цитата:
Сообщение от Modis Посмотреть сообщение
А зачем тогда в SDK делать файлы, отличные от акадовских, если dll'ка будет работать именно с акадовскими?
Нет, я не спорю - может и отличаются, просто моя логика сломалась
Затем, например, что у программиста может быть не установлен AutoCAD, а собрать свою .NET-сборку нужно. Алексей прав - в составе ObjectARX заглушки и именно поэтому нужно CopyLocal устанавливать в False, чтобы при работе использовались dll-ки из самого AutoCAD.
Александр Ривилис вне форума  
 
Непрочитано 05.09.2012, 09:37
#20
Modis


 
Регистрация: 12.06.2010
Липецк, Москва
Сообщений: 534


Цитата:
Сообщение от Александр Ривилис Посмотреть сообщение
Затем, например, что у программиста может быть не установлен AutoCAD, а собрать свою .NET-сборку нужно. Алексей прав - в составе ObjectARX заглушки и именно поэтому нужно CopyLocal устанавливать в False, чтобы при работе использовались dll-ки из самого AutoCAD.
Уж извините за назойливость и оффтоп, но... заглушки - это что такое?
Modis вне форума  
 
Непрочитано 05.09.2012, 10:02
#21
hwd

C, C++, C#
 
Регистрация: 07.10.2009
С-Пб.
Сообщений: 2,762
Отправить сообщение для hwd с помощью Skype™


Цитата:
Сообщение от Modis Посмотреть сообщение
заглушки - это что такое?
В моём понимании, это библиотека, публичные классы которой имеют в своём составе полный набор необходимых публичных членов (поля, свойства, события, методы, конструкторы, деструкторы и т.п.), но в которых отсутствует собственно сам код реализации.

Похоже, что заглушки от Autodesk - это обычные копии оригиналов, потому как содержат в своих членах код программной логики (ILSpy в помощь). Поскольку для заглушки важно лишь иметь все те же члены, что и у ориганала, то она может отличаться от этого оригинала размером файла и датой создания за счёт того, что исходный код оригинала со временем был перекомпилирован, а уже имеющийся файл заглушки разработчиками не заменялся на обновлённую версию этого оригинала (поскольку для заглушки это не имеет значения).

Ключевым моментом здесь является установка для файлов заглушек свойству CopyLocal значения False.
__________________
Надеюсь, ты не социальный овощ? Это определяется делами! :welcome:

Последний раз редактировалось hwd, 05.09.2012 в 10:15.
hwd вне форума  
 
Непрочитано 05.09.2012, 10:04
#22
Дима_

Продуман
 
Регистрация: 22.02.2007
Питер
Сообщений: 2,839


Цитата:
Сообщение от Modis Посмотреть сообщение
Уж извините за назойливость и оффтоп, но... заглушки - это что такое?
Функции которые все входящие аргументы передают реальной функци и возращают ее "возрат", есть еще схожие так называемые "обертки" - которые делают все то-же самое, но переводя из формата в формат, например Net. WinForms в большинстве своем - обертки на GUI Win Api, а все лисповские vla-get/put-... обертки на соответствующие ActiveX свойства(методы).
p.s.опс опоздал
__________________
Когда в руках молоток все вокруг кажется гвоздями.
Дима_ вне форума  
 
Непрочитано 05.09.2012, 10:09
#23
hwd

C, C++, C#
 
Регистрация: 07.10.2009
С-Пб.
Сообщений: 2,762
Отправить сообщение для hwd с помощью Skype™


2 Дима_
Заглушки и обёртки - это, на мой взгляд, несколько разные вещи... Заглушка может быть создана как для обёртки, так и для самостоятельной библиотеки.
__________________
Надеюсь, ты не социальный овощ? Это определяется делами! :welcome:

Последний раз редактировалось hwd, 05.09.2012 в 10:16.
hwd вне форума  
 
Непрочитано 05.09.2012, 10:17
#24
Дима_

Продуман
 
Регистрация: 22.02.2007
Питер
Сообщений: 2,839


А разве я пишу что одинаковые? В смысле ООП (при статической типизации) - да может быть действительно просто пустой конструктор (необходимый для компиляции), но заглушки же есть не только там - если типизация динамическая - где так-же делают "пустую" заглушку - для тех-же целей (если вдруг программа проверяет наличие члена - просто в этом случае написать ее проще - т.к. не нужно описывать типы входа и выхода).
п.с. Как тобой уже верно замеченно в Автодеске третий вид "заглушек".
__________________
Когда в руках молоток все вокруг кажется гвоздями.

Последний раз редактировалось Дима_, 05.09.2012 в 10:24.
Дима_ вне форума  
 
Непрочитано 05.09.2012, 12:54
#25
Modis


 
Регистрация: 12.06.2010
Липецк, Москва
Сообщений: 534


Дима_, hwd, Спасибо, понял. Теперь буду знать
Modis вне форума  
Ответ
Вернуться   Форум DWG.RU > Программное обеспечение > Программирование > .NET > Hello, World на AutoCAD .NET DLL



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Какой AutoCAD использовать ? denes AutoCAD 55 12.09.2011 14:29
Net. Создание и модификация материала Павлюкас Готовые программы 27 08.12.2010 10:17
Правило формирование записей в реестре об установленных обновлениях для AutoCAD и его вертикальных решений. hwd Программирование 8 30.09.2010 15:07
Где в реестре хранится информация о том, что в системе когда-то был установлен AutoCAD? Archeo AutoCAD 12 14.10.2009 15:24
Проблемы с .NET v2 в Autocad 2006 (acad.exe.config)... Chief Justice AutoCAD 2 12.08.2006 12:44