Показ локализованных имён свойств с использованием Не-COM системы свойств

Автор Тема: Показ локализованных имён свойств с использованием Не-COM системы свойств  (Прочитано 5675 раз)

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

Тема содержит сообщение с Решением. Нажмите здесь чтобы посмотреть его.

Оффлайн Александр РивилисАвтор темы

  • Administrator
  • *****
  • Сообщений: 13829
  • Карма: 1784
  • Рыцарь ObjectARX
  • Skype: rivilis
Не забывайте про правильное Форматирование кода на форуме
Создание и добавление Autodesk Screencast видео в сообщение на форуме
Если Вы задали вопрос и на форуме появился правильный ответ, то не забудьте про кнопку Решение

Оффлайн avc

  • ADN Club
  • *****
  • Сообщений: 805
  • Карма: 166
    • Мои плагины к Автокаду
А кто-нибудь на самом деле пробовал этот метод? У меня не получается. Аттрибут AcRxLocalizedNameAttribute вообще-то влияет на поведение Автокада, какой-то ресурсный файл считывается. Но не мой. В результате вместо имени свойства - случайная строка. Метод MyResourceLoader::subLoadString не вызывается вообще никогда. Мне кажется странной строка в коде
Код - C++ [Выбрать]
  1.  MyDoubleProperty::desc()->addX(AcRxResourceLoader::desc(), &_mrl);
Почему тут используется предок AcRxResourceLoader? Я заменил на 
Код - C++ [Выбрать]
  1.  MyDoubleProperty::desc()->addX(MyResourceLoader::desc(), &_mrl);
но это не помогло...
Еще странно что _mrl заполняется, но нигде и никогда не используется.

Оффлайн Александр РивилисАвтор темы

  • Administrator
  • *****
  • Сообщений: 13829
  • Карма: 1784
  • Рыцарь ObjectARX
  • Skype: rivilis
Ты тестовый пример (проект) качал, компилировал и проверял?
Не забывайте про правильное Форматирование кода на форуме
Создание и добавление Autodesk Screencast видео в сообщение на форуме
Если Вы задали вопрос и на форуме появился правильный ответ, то не забудьте про кнопку Решение

Оффлайн avc

  • ADN Club
  • *****
  • Сообщений: 805
  • Карма: 166
    • Мои плагины к Автокаду
Скачивал. У меня все слово-в-слово. настройки проекта как-то могут влиять? Попробую скомпилировать сам пример.....
Нашел пример как вызывается addX - там же в него инициализированный экземпляр передать надо ж. Переписал так:
Код - C++ [Выбрать]
  1. static MyResourceLoader *_mrl = NULL;
  2. .....
  3.                 if (_mrl == NULL)
  4.                 {
  5.                         _mrl = new MyResourceLoader();
  6.                         MyDoubleProperty::desc()->addX(AcRxResourceLoader::desc(), _mrl);
  7.                 }
Не помогает. все равно мой метод subLoadString не вызывается :(

Оффлайн Александр РивилисАвтор темы

  • Administrator
  • *****
  • Сообщений: 13829
  • Карма: 1784
  • Рыцарь ObjectARX
  • Skype: rivilis
А где у тебя этот строковый ресурс находится?
Не забывайте про правильное Форматирование кода на форуме
Создание и добавление Autodesk Screencast видео в сообщение на форуме
Если Вы задали вопрос и на форуме появился правильный ответ, то не забудьте про кнопку Решение

Оффлайн Александр РивилисАвтор темы

  • Administrator
  • *****
  • Сообщений: 13829
  • Карма: 1784
  • Рыцарь ObjectARX
  • Skype: rivilis
Нашел пример как вызывается addX - там же в него инициализированный экземпляр передать надо ж. Переписал так:
Это всё лишнее от твоего незнания C++. Инициализация происходит здесь:
Код - C++ [Выбрать]
  1. MyResourceLoader _mrl;
В отличии от C# такая запись означает вызов конструктора MyResourceLoader.
Не забывайте про правильное Форматирование кода на форуме
Создание и добавление Autodesk Screencast видео в сообщение на форуме
Если Вы задали вопрос и на форуме появился правильный ответ, то не забудьте про кнопку Решение

Оффлайн avc

  • ADN Club
  • *****
  • Сообщений: 805
  • Карма: 166
    • Мои плагины к Автокаду
для чистоты эксперимента убрал все ресурсы. метод загрузки строки упростил по максимуму:
Код - C++ [Выбрать]
  1.         virtual Acad::ErrorStatus subLoadString(unsigned int id, unsigned int sourceHint, AcString& result)
  2.         {
  3.                         acutPrintf(ACRX_T("\n\n---------------------------------- test ---------------------------------\n\n"));
  4.                         result = ACRX_T("КуКу");
  5.                         return Acad::eOk;
  6.         }
в консоли ничего нет, метод не вызывается. для идентификатора строки 101 вместо имени свойства пишет "Current Fit Point" - явно что-то из стандартных ресурсов Автокада.

Оффлайн avc

  • ADN Club
  • *****
  • Сообщений: 805
  • Карма: 166
    • Мои плагины к Автокаду
такая запись означает вызов конструктора MyResourceLoader
офигеть... ну да в C++ как в темном лесу, извиняйте :(

Оффлайн avc

  • ADN Club
  • *****
  • Сообщений: 805
  • Карма: 166
    • Мои плагины к Автокаду
Собрал проект из примера. Изменил только версию ObjectARX на 2018. Все то же самое. Метод subLoadString не вызывается. Вместо имени свойства выводится та же самая строка "Current Fit Point"

Оффлайн Александр РивилисАвтор темы

  • Administrator
  • *****
  • Сообщений: 13829
  • Карма: 1784
  • Рыцарь ObjectARX
  • Skype: rivilis
Выложи архив с проектом - посмотрю. Тут три варианта. Или что-то испортили в новых версиях, или ошибка в проекте или ты неправильно портировал.
Не забывайте про правильное Форматирование кода на форуме
Создание и добавление Autodesk Screencast видео в сообщение на форуме
Если Вы задали вопрос и на форуме появился правильный ответ, то не забудьте про кнопку Решение


Оффлайн avc

  • ADN Club
  • *****
  • Сообщений: 805
  • Карма: 166
    • Мои плагины к Автокаду
К сожалению вариант первый - что-то испортили. Скомпилировал под 2013x32 - работает :(

Оффлайн Александр РивилисАвтор темы

  • Administrator
  • *****
  • Сообщений: 13829
  • Карма: 1784
  • Рыцарь ObjectARX
  • Skype: rivilis
Будет повод у них уточнить.
Не забывайте про правильное Форматирование кода на форуме
Создание и добавление Autodesk Screencast видео в сообщение на форуме
Если Вы задали вопрос и на форуме появился правильный ответ, то не забудьте про кнопку Решение

Оффлайн Александр РивилисАвтор темы

  • Administrator
  • *****
  • Сообщений: 13829
  • Карма: 1784
  • Рыцарь ObjectARX
  • Skype: rivilis
Я портировал сам, создав при помощи ObjectARX Wizard 2018 проект и аккуратно перебросив файлы. К сожалению результат отрицательный. Послал запрос в ADN DevHelp. Подождём ответа.
Не забывайте про правильное Форматирование кода на форуме
Создание и добавление Autodesk Screencast видео в сообщение на форуме
Если Вы задали вопрос и на форуме появился правильный ответ, то не забудьте про кнопку Решение

Отмечено как Решение Александр Ривилис 28-12-2017, 14:16:24

Оффлайн Александр РивилисАвтор темы

  • Administrator
  • *****
  • Сообщений: 13829
  • Карма: 1784
  • Рыцарь ObjectARX
  • Skype: rivilis
Баг признали и передали разработчикам.
Не забывайте про правильное Форматирование кода на форуме
Создание и добавление Autodesk Screencast видео в сообщение на форуме
Если Вы задали вопрос и на форуме появился правильный ответ, то не забудьте про кнопку Решение