На главную... Продукты | Технологии | Классификаторы | Проекты | Скачать | Цены| Форум | Статьи | Обучение | Контакты

При переходе с 11 версии на 12 перестала работать функция mapGetRscObjectCodeByName

Поиск  Пользователи  Правила  Войти
Форум » Настольные приложения » GIS ToolKit, GIS ToolKit Active, ГИС Конструктор для Windows
Страницы: 1
RSS
При переходе с 11 версии на 12 перестала работать функция mapGetRscObjectCodeByName
 
На 11 версии работало как часы, а на 12 - всегда ошибка. Карта та же самая.

Подскажите в какую сторону копать. Что изменилось?
 
Сама функция никак не изменилась.Также находится в gisaccess.dll и также работает.
Если Вы используете штатные заголовочные файлы GIS ToolKit или прототипы функций для Delphi, описанные в mapproc.pas, то для Вас ничего не должно было поменяться.

Если Вы прототипы функций объявляли самостоятельно, то надо их немного подправить.

При переходе с 11 на 12 версию в ряде MAPAPI функций строковые параметры, передаваемые по указателю, дополнены словом const.
Для некоторых компиляторов это прозрачно, некоторые не узнают функцию, также ошибка может происходить на этапе линковки.

Цитата
 // Запросить внутренний  код (порядковый номер) объекта
 // по имени
 // hRsc - идентификатор классификатора карты
 // name - имя объекта
 // При ошибке возвращает ноль

_MAPIMP  long _MAPAPI mapGetRscObjectCodeByName(HRSC hRsc, const char * name);

Как именно ошибка проявляется у Вас?
 
Цитата
Денис Вицко написал:
Как именно ошибка проявляется у Вас?




Ошибка как результат выполнения. Т.е. функция нашлась и вызвалась.

Узнать бы причину ошибки...
Изменено: Николай Беспалов - 18.11.2020 17:10:04
 
Версия 12 уже не поддерживается.

Как вариант - можно в цикле перебрать имена объектов и сделать сравнение:

 // Запросить имя объекта по внутреннему  коду (порядковому номеру) объекта (с 1)
 // hRsc - идентификатор классификатора карты
 // incode - внутренний код объекта (номер по порядку)
 // При ошибке возвращает пустую строку

_MAPIMP  const char * _MAPAPI mapGetRscObjectName(HRSC hRsc,long int incode);
 
Причина найдена! Я думаю вам будет интересно.

Имеем имя объекта "КВАРТАЛЫ ПЛОТ.ЗАСТР.КРУП.ГОР. ", обратите внимание на пробел в конце строки.

- 11 версия выполняя mapGetRscObjectCodeByName при отсутствии пробела в конце выдает ожидаемый результат
- 12 версия выполняя mapGetRscObjectCodeByName при отсутствии пробела в конце сообщает об ошибке

Судя по всему 11 версия делала trim входной строки, а 12 версия перестала это делать и пытается искать точное соответствие. ИМХО

Почему это вылезло у нас - мы делали trim до вызова. Теперь мы передаем ровно то что было получено из mapObjectName.
 
Спасибо за информацию!
Версия 13 сравнивает строки так, как передали.
Страницы: 1
Читают тему (гостей: 1)



© КБ Панорама, 1991-2024

Регистрируясь или авторизуясь на форуме, Вы соглашаетесь с Политикой конфиденциальности