Почему флагу LoadCtrls в качестве значения назначено 77?

Автор Тема: Почему флагу LoadCtrls в качестве значения назначено 77?  (Прочитано 7271 раз)

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

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

  • ADN Club
  • *****
  • Сообщений: 2000
  • Карма: 163
  • Пишу программки...
    • Блог
  • Skype: Compositum78
Здесь перечислены допустимые значения флага LoadCtrls. Если задействовать сразу все флаги, то получится 63. Во вложении скрин, на котором для одного из "родных" имеющихся расширений от Autodesk этому флагу назначено значение 77. Если из 77 вычесть 63, то получаем 14, что соответствует набору флагов 8, 4 и 2.

Это очередной пример через задницу написанного кода, или же есть какая-то объективная причина использования 77 в качестве значения?

Отмечено как Решение Андрей Бушман 24-10-2016, 16:37:23

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

  • Administrator
  • *****
  • Сообщений: 13868
  • Карма: 1785
  • Рыцарь ObjectARX
  • Skype: rivilis
77 = 0x4D = 0x40 + 0x0D = 0x40 + 0x08 + 0x04+ 0x01 = kOnIdleLoad + kOnLoadRequest + kOnCommandInvocation + kOnProxyDetection
Код - C++ [Выбрать]
  1.   enum LoadReasons {
  2.     kOnProxyDetection = 0x01,
  3.     kOnAutoCADStartup = 0x02,
  4.     kOnCommandInvocation = 0x04,
  5.     kOnLoadRequest = 0x08,
  6.     kLoadDisabled = 0x10,
  7.     kTransparentlyLoadable = 0x20,
  8.     kOnIdleLoad = 0x40
  9.   };

Цитировать
kOnProxyDetection = 0x01  Load the ObjectARX application when objects of custom classes it controls are loaded via drawing open, dxfin, insert, and so on 
kOnAutoCADStartup = 0x02  Load the ObjectARX application when AutoCAD starts up 
kOnCommandInvocation = 0x04  Load the ObjectARX application whenever an unknown command is executed for which it has a registry entry 
kOnLoadRequest = 0x08  Allow loading of the ObjectARX application via the AcRxDynamicLinker::loadApp method 
kLoadDisabled = 0x10  Do not demand load the ObjectARX application for any reason 
kTransparentlyLoadable = 0x20  Load the ObjectARX application transparently 
kOnIdleLoad = 0x40  Load the ObjectARX application when the system is idle 



 
Не забывайте про правильное Форматирование кода на форуме
Создание и добавление Autodesk Screencast видео в сообщение на форуме
Если Вы задали вопрос и на форуме появился правильный ответ, то не забудьте про кнопку Решение

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

  • ADN Club
  • *****
  • Сообщений: 2000
  • Карма: 163
  • Пишу программки...
    • Блог
  • Skype: Compositum78
kOnIdleLoad = 0x40  Load the ObjectARX application when the system is idle 
Спасибо, понял: по обозначенной мною выше ссылке в документации отсуствует информация по ключу 0x40, что в десятичной системе соответствует 64.

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

  • ADN Club
  • *****
  • Сообщений: 2000
  • Карма: 163
  • Пишу программки...
    • Блог
  • Skype: Compositum78
А как тогда интерпретировать значение 0 (см. вложенный скрин)? Пока я его в своём коде интерпретирую как неизвестное значение.

На данный момент, насколько я вижу, все имеющиеся случаи для AutoCAD 2009-2017 учитываются таким набором флагов:

Код - C# [Выбрать]
  1. [Flags]
  2. public enum LoadCtrls {
  3.     Unknown = 0, // unknown value.
  4.     // Load application upon detection of proxy object
  5.     LoadWhenProxyDetected = 1,
  6.     // Load the application at startup
  7.     LoadAtApplicationStartup = 2,
  8.     // Load the application at start of a command
  9.     LoadWhenCommandLaunched = 4,
  10.     /* Load the application at the request of a user or
  11.      * another application. */
  12.     LoadWhenRequestedByUserOrApplication = 8,
  13.     // Do not load the application
  14.     DontLoad = 16,
  15.     // Load the application transparently
  16.     LoadTransparently = 32,
  17.     /* Load the ObjectARX application when the system is
  18.      * idle */
  19.     LoadArxWhenSystemIsIdle = 64
  20. }
Но мне бы хотелось вместо "Unknown "  написать что-то более понятное :).

И ещё один вопрос: значение 64 актуально только для ObjectARX application, или всё же может использоваться и для .Net-расширений?

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

  • Administrator
  • *****
  • Сообщений: 13868
  • Карма: 1785
  • Рыцарь ObjectARX
  • Skype: rivilis
Но мне бы хотелось вместо "Unknown "  написать что-то более понятное :).
Я так понимаю, что отличие 0 и 16 в том, что при 16 приложение не грузится даже если его пытаться грузить через API, а при 0 его можно принудительно загрузить.
64 относится и к Managed.
Не забывайте про правильное Форматирование кода на форуме
Создание и добавление Autodesk Screencast видео в сообщение на форуме
Если Вы задали вопрос и на форуме появился правильный ответ, то не забудьте про кнопку Решение

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

  • ADN Club
  • *****
  • Сообщений: 2000
  • Карма: 163
  • Пишу программки...
    • Блог
  • Skype: Compositum78

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

  • ADN Club
  • *****
  • Сообщений: 2000
  • Карма: 163
  • Пишу программки...
    • Блог
  • Skype: Compositum78
Я так понимаю, что отличие 0 и 16 в том, что при 16 приложение не грузится даже если его пытаться грузить через API, а при 0 его можно принудительно загрузить.
Поторопился я с плюсиком к вашему сообщению...

Похоже, что ваше понимание оказалось ошибочным. Я проверял так: пытался через NETLOAD подгрузить управляемый плагин, для которого в реестре указано как 0, так и 16. Все попытки оказались успешными. Проверял в AutoCAD 2009 и 2017.

Можете в ADN уточнить в чём разница между этими значениями?

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

  • Administrator
  • *****
  • Сообщений: 13868
  • Карма: 1785
  • Рыцарь ObjectARX
  • Skype: rivilis
Можете в ADN уточнить в чём разница между этими значениями?
Ты видимо не понял о чем идёт речь. Загрузка по прямому пути к файлу (как это делает NETLOAD) работает в любом случае. В этом случае реестр просто не проверяется. Проверка производится при выполнении загрузки через имя приложения, т.е. через функцию acrxLoadApp, которой передаётся не путь к приложению, а имя приложения.
Не забывайте про правильное Форматирование кода на форуме
Создание и добавление Autodesk Screencast видео в сообщение на форуме
Если Вы задали вопрос и на форуме появился правильный ответ, то не забудьте про кнопку Решение

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

  • ADN Club
  • *****
  • Сообщений: 2000
  • Карма: 163
  • Пишу программки...
    • Блог
  • Skype: Compositum78
Проверка производится при выполнении загрузки через имя приложения, т.е. через функцию acrxLoadApp, которой передаётся не путь к приложению, а имя приложения.
Вы проверяли это?

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

  • Administrator
  • *****
  • Сообщений: 13868
  • Карма: 1785
  • Рыцарь ObjectARX
  • Skype: rivilis
Вы проверяли это?
Я не проверял, но об этом четко сказано в документации.
Можешь сам проверить. Кстати, вот "обертки":
AcDbHostApplicationServices::loadApp  -> HostApplicationServices.LoadApplication
acrxLoadApp -> DynamicLinker.LoadApp

Не забывайте про правильное Форматирование кода на форуме
Создание и добавление Autodesk Screencast видео в сообщение на форуме
Если Вы задали вопрос и на форуме появился правильный ответ, то не забудьте про кнопку Решение

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

  • ADN Club
  • *****
  • Сообщений: 2000
  • Карма: 163
  • Пишу программки...
    • Блог
  • Skype: Compositum78
Я не проверял, но об этом четко сказано в документации.
Можешь сам проверить. Кстати, вот "обертки":
AcDbHostApplicationServices::loadApp  -> HostApplicationServices.LoadApplication
acrxLoadApp -> DynamicLinker.LoadApp
Спасибо!

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

  • ADN Club
  • *****
  • Сообщений: 2000
  • Карма: 163
  • Пишу программки...
    • Блог
  • Skype: Compositum78
Подправил перечисление:
Код - C# [Выбрать]
  1. [Flags]
  2. public enum LoadCtrls {
  3.     /// <summary>
  4.     /// Don't load application. This variant allows to load
  5.     /// the application later through the
  6.     /// `HostApplicationServices.LoadApplication` or
  7.     /// `DynamicLinker.LoadApp` functions.
  8.     /// </summary>
  9.     NotLoad = 0,
  10.     /// <summary>
  11.     /// Load application upon detection of proxy object.
  12.     /// </summary>
  13.     LoadWhenProxyDetected = 1,
  14.     /// <summary>
  15.     /// Load the application at startup.
  16.     /// </summary>
  17.     LoadAtApplicationStartup = 2,
  18.     /// <summary>
  19.     /// Load the application at start of a command.
  20.     /// </summary>
  21.     LoadWhenCommandLaunched = 4,
  22.     /// <summary>
  23.     /// Load the application at the request of a user or
  24.     /// another application.
  25.     /// </summary>
  26.     LoadWhenRequestedByUserOrApplication = 8,
  27.     /// <summary>
  28.     /// Do not load the application. Also this variant
  29.     /// forbids to load the application later through the
  30.     /// `HostApplicationServices.LoadApplication` or
  31.     /// `DynamicLinker.LoadApp` functions.
  32.     /// </summary>
  33.     ForbidLoad = 16,
  34.     /// <summary>
  35.     /// Load the application transparently.
  36.     /// </summary>
  37.     LoadTransparently = 32,
  38.     /// <summary>
  39.     /// Load the application when the system is idle.
  40.     /// </summary>
  41.     LoadArxWhenSystemIsIdle = 64
  42. }