Каталоги inc-win32 и inc-x64

Автор Тема: Каталоги inc-win32 и inc-x64  (Прочитано 7935 раз)

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

Оффлайн Андрей БушманАвтор темы

  • ADN Club
  • *****
  • Сообщений: 2000
  • Карма: 163
  • Пишу программки...
    • Блог
  • Skype: Compositum78
Каталоги inc-win32 и inc-x64
« : 27-02-2014, 15:16:48 »
Доброго времени суток.

В каталоге ObjectARX SDK присутствуют, помимо прочего, следующие подкаталоги:
  • inc - ресурсы, не зависящие от разрядности AutoCAD (x86\x64)
  • inc-win32 - ресурсы, предназначенные для использования в AutoCAD x86
  • inc-x64 - ресурсы, предназначенные для использования в AutoCAD x64
Как правило, библиотеки присутствующие в п.2 и п.3 линкуются с опцией CopyLocal = False. Обычно, когда я компилирую плагин с опцией x86 или x64, то не выполняю переподключение ссылок на одноимённые библиотеки из каталога соответствующей разрядности, предполагая, что CopyLocal = False избавляет меня от такой необходимости. Однако возможно, что если Autodesk сделала такое разделение, то оно для чего-то  всё-таки нужно...

1. Может ли обозначенный мною подход выйти мне боком? Если да, то в каких случаях? Пока, вроде бы, проблем не возникало.
2. Если по п.1 проблем не возникает, тогда для чего выполнено разделение на inc-win32 и inc-x64?

Спасибо.

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

  • Administrator
  • *****
  • Сообщений: 13886
  • Карма: 1788
  • Рыцарь ObjectARX
  • Skype: rivilis
Re: Каталоги inc-win32 и inc-x64
« Ответ #1 : 27-02-2014, 15:28:20 »
Так сложилось исторически. Во-первых, не забывай что ObjectARX - это ObjectARX. И AutoCAD .NET API к нему лишь приложение. Почему я так пишу? Потому что каталоги inc, inc-x86 и inc-Win32 в первую очередь содержат *.h файлы C++. Часть из них не зависит от разрядности, часть (в первую очередь связанная с ActiveX/COM) - зависит.
Что касается AutoCAD .NET API, то в версиях до 2010 включительно сборки AcDbMgd.dll, AcMgd.dll и т.д. компилированы отдельно для x86 и для x64. Начиная с версии 2011 эти сборки не зависят от разрядности.
Т.к. эти сборки лишь "заглушки", а реально используются те, которые в составе AutoCAD, то твой подход должен работать всегда.
Не забывайте про правильное Форматирование кода на форуме
Создание и добавление Autodesk Screencast видео в сообщение на форуме
Если Вы задали вопрос и на форуме появился правильный ответ, то не забудьте про кнопку Решение

Оффлайн Андрей БушманАвтор темы

  • ADN Club
  • *****
  • Сообщений: 2000
  • Карма: 163
  • Пишу программки...
    • Блог
  • Skype: Compositum78
Re: Каталоги inc-win32 и inc-x64
« Ответ #2 : 09-03-2014, 21:28:25 »
Всё же непонятно, зачем заглушки для .NET библиотек разнесены по разным каталогам, если без разницы какие из копий подключать? Зачем такое дублирование и почему они попросту не выложены все в inc?

"Исторически сложилось" - я понимаю это применительно к C++, но .NET "играет" по несколько иным правилам. Ведь до сих пор .NET заглушки присутствуют в трёх каталогах:
- inc
- inc-win32
- inc-x64
Возможно всё же существуют объективные причины такого положения дел применительно к заглушкам .NET, помимо "исторически сложилось"? Ведь начиная с 2011-й версии часть заглушек была перенесена в inc. Почему только часть, почему не все? Я предполагаю, что в основе такого решения должны быть объективные причины. Вот о них я и спрашиваю. Не принципиально, в каком каталоге размещались бы недублируемые .NET заглушки: хоть в "net", без всяких заголовочных файлов C++ и всего того, что не относится к .NET.
« Последнее редактирование: 09-03-2014, 21:52:26 от Андрей Бушман »

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

  • Administrator
  • *****
  • Сообщений: 13886
  • Карма: 1788
  • Рыцарь ObjectARX
  • Skype: rivilis
Re: Каталоги inc-win32 и inc-x64
« Ответ #3 : 10-03-2014, 01:42:20 »
Возможно всё же существуют объективные причины такого положения дел применительно к заглушкам .NET, помимо "исторически сложилось"?
Ты меня не читаешь. Повторюсь:
Часть из них не зависит от разрядности, часть (в первую очередь связанная с ActiveX/COM) - зависит.
Дополнительная расшифровка:
Autodesk.AutoCAD.Interop.dll, Autodesk.AutoCAD.Interop.Common.dll (оба файла сгенерированы на основе ActiveX/COM-модели), а также все tlb-файлы зависят от разрядности AutoCAD.
.c и .h-файлы в каталогах inc-win32 и inc-x64 генерируется на основе ActiveX/COM модели AutoCAD и тоже зависят от разрядности AutoCAD. И это принципиально неустранимо.
Не забывайте про правильное Форматирование кода на форуме
Создание и добавление Autodesk Screencast видео в сообщение на форуме
Если Вы задали вопрос и на форуме появился правильный ответ, то не забудьте про кнопку Решение

Оффлайн Андрей БушманАвтор темы

  • ADN Club
  • *****
  • Сообщений: 2000
  • Карма: 163
  • Пишу программки...
    • Блог
  • Skype: Compositum78
Re: Каталоги inc-win32 и inc-x64
« Ответ #4 : 10-03-2014, 10:11:15 »
Ты меня не читаешь. Повторюсь:
Я вас внимательно читаю. Давайте повторим цитату более полно, не вырывая предложений из контекста:
Цитата: Александр Ривилис
Потому что каталоги inc, inc-x86 и inc-Win32 в первую очередь содержат *.h файлы C++. Часть из них не зависит от разрядности, часть (в первую очередь связанная с ActiveX/COM) - зависит.
Т.е. в контексте данной фразы речь шла о заголовочных файлах C++, а не об обёртках .NET.
Цитата: Александр Ривилис
Что касается AutoCAD .NET API, то в версиях до 2010 включительно сборки AcDbMgd.dll, AcMgd.dll и т.д. компилированы отдельно для x86 и для x64. Начиная с версии 2011 эти сборки не зависят от разрядности.
Вот я и спрашиваю: зачем две версии заглушек? Означает ли это, что компилируя для x86 и x64, необходимо и ссылки каждый раз переподключать, используя заглушки из соответствующих каталогов (если заглушка находится не в inc)? Временами я этого не делаю и не помню, чтобы возникали какие-либо проблемы (возможно память подводит).
Цитата: Александр Ривилис
Дополнительная расшифровка:
Autodesk.AutoCAD.Interop.dll, Autodesk.AutoCAD.Interop.Common.dll (оба файла сгенерированы на основе ActiveX/COM-модели), а также все tlb-файлы зависят от разрядности AutoCAD.
.c и .h-файлы в каталогах inc-win32 и inc-x64 генерируется на основе ActiveX/COM модели AutoCAD и тоже зависят от разрядности AutoCAD. И это принципиально неустранимо.
Это всё понятно, но спрашиваю я несколько о другом... Возможно не достаточно чётко сформулирован вопрос, поэтому стараюсь пояснить его... Нужно ли для таких библиотек, компилируя код под разные платформы, переподключать и ссылки проекта, каждый раз указывая заглушки из соответствующего каталога? Если всё же в этом нет необходимости, то возникает законный вопрос: тогда для чего дубляж заглушек?

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

  • Administrator
  • *****
  • Сообщений: 13886
  • Карма: 1788
  • Рыцарь ObjectARX
  • Skype: rivilis
Re: Каталоги inc-win32 и inc-x64
« Ответ #5 : 10-03-2014, 13:35:07 »
Нужно ли для таких библиотек, компилируя код под разные платформы, переподключать и ссылки проекта, каждый раз указывая заглушки из соответствующего каталога?
Да. Конкретных примеров когда без этого не будет работать - не приведу. Но на это указывал Stephen Preston, что говорит о том, что в ряде случае есть различия между этими сборками в зависимости от разрядности.
Не забывайте про правильное Форматирование кода на форуме
Создание и добавление Autodesk Screencast видео в сообщение на форуме
Если Вы задали вопрос и на форуме появился правильный ответ, то не забудьте про кнопку Решение

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

  • Administrator
  • *****
  • Сообщений: 13886
  • Карма: 1788
  • Рыцарь ObjectARX
  • Skype: rivilis
Re: Каталоги inc-win32 и inc-x64
« Ответ #6 : 10-03-2014, 14:44:06 »
В дополнение к вышесказанному: Где находятся сборки COM взаимодействия (Interop) ?
Не забывайте про правильное Форматирование кода на форуме
Создание и добавление Autodesk Screencast видео в сообщение на форуме
Если Вы задали вопрос и на форуме появился правильный ответ, то не забудьте про кнопку Решение

Оффлайн Андрей БушманАвтор темы

  • ADN Club
  • *****
  • Сообщений: 2000
  • Карма: 163
  • Пишу программки...
    • Блог
  • Skype: Compositum78
Re: Каталоги inc-win32 и inc-x64
« Ответ #7 : 10-03-2014, 21:41:44 »
Спасибо