Сообщество программистов Autodesk в СНГ

Статьи => Опубликованные статьи => Тема начата: Александр Ривилис от 08-06-2013, 00:43:32

Название: Показ локализованных имён свойств с использованием Не-COM системы свойств
Отправлено: Александр Ривилис от 08-06-2013, 00:43:32
Показ локализованных имён свойств с использованием Не-COM системы свойств (http://adn-cis.org/pokaz-lokalizovannyix-imyon-svojstv-s-ispolzovaniem-ne-com-sistemyi-svojstv.html)
Название: Re: Показ локализованных имён свойств с использованием Не-COM системы свойств
Отправлено: avc от 30-11-2017, 17:26:48
А кто-нибудь на самом деле пробовал этот метод? У меня не получается. Аттрибут AcRxLocalizedNameAttribute вообще-то влияет на поведение Автокада, какой-то ресурсный файл считывается. Но не мой. В результате вместо имени свойства - случайная строка. Метод MyResourceLoader::subLoadString не вызывается вообще никогда. Мне кажется странной строка в коде
Код - C++ [Выбрать]
  1.  MyDoubleProperty::desc()->addX(AcRxResourceLoader::desc(), &_mrl);
Почему тут используется предок AcRxResourceLoader? Я заменил на 
Код - C++ [Выбрать]
  1.  MyDoubleProperty::desc()->addX(MyResourceLoader::desc(), &_mrl);
но это не помогло...
Еще странно что _mrl заполняется, но нигде и никогда не используется.
Название: Re: Показ локализованных имён свойств с использованием Не-COM системы свойств
Отправлено: Александр Ривилис от 30-11-2017, 17:33:11
Ты тестовый пример (проект) качал, компилировал и проверял?
Название: Re: Показ локализованных имён свойств с использованием Не-COM системы свойств
Отправлено: avc от 30-11-2017, 17:49:40
Скачивал. У меня все слово-в-слово. настройки проекта как-то могут влиять? Попробую скомпилировать сам пример.....
Нашел пример как вызывается 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 не вызывается :(
Название: Re: Показ локализованных имён свойств с использованием Не-COM системы свойств
Отправлено: Александр Ривилис от 30-11-2017, 17:54:47
А где у тебя этот строковый ресурс находится?
Название: Re: Показ локализованных имён свойств с использованием Не-COM системы свойств
Отправлено: Александр Ривилис от 30-11-2017, 17:57:33
Нашел пример как вызывается addX - там же в него инициализированный экземпляр передать надо ж. Переписал так:
Это всё лишнее от твоего незнания C++. Инициализация происходит здесь:
Код - C++ [Выбрать]
  1. MyResourceLoader _mrl;
В отличии от C# такая запись означает вызов конструктора MyResourceLoader.
Название: Re: Показ локализованных имён свойств с использованием Не-COM системы свойств
Отправлено: avc от 30-11-2017, 18:02:58
для чистоты эксперимента убрал все ресурсы. метод загрузки строки упростил по максимуму:
Код - 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" - явно что-то из стандартных ресурсов Автокада.
Название: Re: Показ локализованных имён свойств с использованием Не-COM системы свойств
Отправлено: avc от 30-11-2017, 18:12:31
такая запись означает вызов конструктора MyResourceLoader
офигеть... ну да в C++ как в темном лесу, извиняйте :(
Название: Re: Показ локализованных имён свойств с использованием Не-COM системы свойств
Отправлено: avc от 30-11-2017, 18:40:45
Собрал проект из примера. Изменил только версию ObjectARX на 2018. Все то же самое. Метод subLoadString не вызывается. Вместо имени свойства выводится та же самая строка "Current Fit Point"
Название: Re: Показ локализованных имён свойств с использованием Не-COM системы свойств
Отправлено: Александр Ривилис от 30-11-2017, 18:46:17
Выложи архив с проектом - посмотрю. Тут три варианта. Или что-то испортили в новых версиях, или ошибка в проекте или ты неправильно портировал.
Название: Re: Показ локализованных имён свойств с использованием Не-COM системы свойств
Отправлено: avc от 30-11-2017, 18:54:19
https://yadi.sk/d/iB9tjVPb3QCVRc
Название: Re: Показ локализованных имён свойств с использованием Не-COM системы свойств
Отправлено: avc от 30-11-2017, 19:06:42
К сожалению вариант первый - что-то испортили. Скомпилировал под 2013x32 - работает :(
Название: Re: Показ локализованных имён свойств с использованием Не-COM системы свойств
Отправлено: Александр Ривилис от 30-11-2017, 20:54:41
Будет повод у них уточнить.
Название: Re: Показ локализованных имён свойств с использованием Не-COM системы свойств
Отправлено: Александр Ривилис от 01-12-2017, 00:49:54
Я портировал сам, создав при помощи ObjectARX Wizard 2018 проект и аккуратно перебросив файлы. К сожалению результат отрицательный. Послал запрос в ADN DevHelp. Подождём ответа.
Название: Re: Показ локализованных имён свойств с использованием Не-COM системы свойств
Отправлено: Александр Ривилис от 05-12-2017, 23:14:38
Баг признали и передали разработчикам.