Как ограничивать версии API для отдельных методов/участков кода?

Автор Тема: Как ограничивать версии API для отдельных методов/участков кода?  (Прочитано 2658 раз)

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

Оффлайн GeorgАвтор темы

  • ADN OPEN
  • **
  • Сообщений: 50
  • Карма: 1
  • //Я не программист
Доброго дня, такой вопрос ... чтобы сделать код универсальным для разных версий API (где используется библиотека) иногда делают такие вставки:

Код - C# [Выбрать]
  1. #if AUTOCAD_2009
  2.         defaultMText.TextStyle =
  3.           textStyle.ObjectId;
  4. #else
  5.         defaultMText.TextStyleId =
  6.           textStyle.ObjectId;
  7. #endif

А где документировано как это использовать? Вводится типа "область видимости" для конкретных библиотек (сборок) API? В частности я вот использовал новейшие Update's (Civil 3D 2022.1), и библиотеки вообще не работают у пользователя с голым 2022 (даже если эти функции не задействуются) ... как такие конструкции применять?

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

  • Administrator
  • *****
  • Сообщений: 13829
  • Карма: 1784
  • Рыцарь ObjectARX
  • Skype: rivilis
Georg,
Собственно говоря есть два варианта:
1) Использовать препроцессор (как в твоем коде) и тогда нужно компилировать под разные версии, получая разные dll-файлы. Пример можно подсмотреть в MGDDBG: https://adn-cis.org/forum/index.php?topic=7274.0
2) Использовать Reflection для вызова методов/свойств в зависимости от версии AutoCAD/Civil (проверяя версию). Проверить версию можно различными способами. Некоторые из них озвучены здесь: https://adn-cis.org/forum/index.php?topic=10315.0
И еще обсуждалось здесь: https://adn-cis.org/forum/index.php?topic=10180.0
В частности я вот использовал новейшие Update's (Civil 3D 2022.1), и библиотеки вообще не работают у пользователя с голым 2022 (даже если эти функции не задействуются)
А вот это странно. Нужно эти проблемы диагностировать, так как такого быть не должно. Что происходит? Не грузится эта dll или происходит Exception при выполнении кода из неё?
Не забывайте про правильное Форматирование кода на форуме
Создание и добавление Autodesk Screencast видео в сообщение на форуме
Если Вы задали вопрос и на форуме появился правильный ответ, то не забудьте про кнопку Решение

Оффлайн GeorgАвтор темы

  • ADN OPEN
  • **
  • Сообщений: 50
  • Карма: 1
  • //Я не программист
Тут библиотека используется в Dynamo ... а у него логика видать такая, что если библиотека содержит методы, не регламентированные/не существующие в рамках данных системных библиотек текущей версии, пользователь вообще не увидит ни один метод библиотеки ... и там увы только 1 dll может использоваться  :-\ :-\ :-\. Платформа отвратительная по части "нормального кода", одни костыли и ограничения ... Вариант с несколькими dll не прокатит даже, так как эта библиотека при загрузке никак не прогружается в программу. Смотрится заголовочная строка dll (под какую крайнюю версию он собирался) и если используемые зависимости новее текущего будет ошибка.

Для случая "классического плагина" да, большое спасибо за варианты, буду их использовать, а тут боюсь ничего не поможет (только управлять версиями пакета добавляя/убирая методы из свежих релизов). Либо выводя это в отдельный "пакет методов/бибилиотеку", но это неудобно с позиции обновления таких частей.