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

Денис Вицко (Все сообщения пользователя)

Поиск  Пользователи  Правила  Войти
Форум » Пользователи » Денис Вицко
Выбрать дату в календареВыбрать дату в календаре

Страницы: 1 2 3 4 5 6 7 8 9 10 11 ... 95 След.
При переходе с 11 версии на 12 перестала работать функция mapGetRscObjectCodeByName
 
Сама функция никак не изменилась.Также находится в gisaccess.dll и также работает.
Если Вы используете штатные заголовочные файлы GIS ToolKit или прототипы функций для Delphi, описанные в mapproc.pas, то для Вас ничего не должно было поменяться.

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

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

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

_MAPIMP  long _MAPAPI mapGetRscObjectCodeByName(HRSC hRsc, [B]const [/B]char * name);[/QUOTE]

Как именно ошибка проявляется у Вас?
Переопределение пути для основных библиотек и WMS-файлов, Каким образом это можно сделать
 
Прежде чем пытаться менять расположение файлов, необходимо понимать физику процессов, происходящих в приложении.

[QUOTE]Vladimir Sturza написал:
// путь не переопределилсяWMSPath2 = GetGISAccessDirPath();  // = Application->ExeNameWMSPath3 = GetGISAccessFilePath(); // = Application->ExeName + gis32acces.dll[/QUOTE]

библиотека gis32acces.dll / gis64acces.dll - это основная библиотека ГИС-ядра.

при ее загрузке путь к ней определяется порядком поиска библиотек Windows (см. MSDN):
[QUOTE]1. Каталог, из которого загружено приложение.
2. Системный каталог.
3. Каталог 16-разрядной версии системы.
4. Каталог Windows.
5. Текущий рабочий каталог.
6. Каталоги, указанные в переменной среды РАТН.[/QUOTE]

либо, если Вы не используете компоненты GTK и загружаете gis32acces.dll / gis64acces.dll самостоятельно динамически, Вы можете при загрузке в LoadLibrary указать полный путь.

Функция GetGISAccessDirPath() возвращает путь, по которому реально была загружена библиотека gis32acces.dll / gis64acces.dll.

Функция переопределения пути к библиотекам ГИС-ядра находится непосредственно в gis32acces.dll / gis64acces.dll.
То есть переопределение пути к библиотекам ГИС-ядра с помощью GisProperty->mapSetPathShell
 во-первых, возможно только после загрузки gis32acces.dll / gis64acces.dll
 во-вторых, никак не влияет на путь, откуда уже загружена gis32acces.dll / gis64acces.dll

Проверить, что установлено в gis32acces.dll / gis64acces.dll в качестве пути к остальным библиотекам ГИС-ядра можно с помощью
GisProperty->mapGetPathShell
[B]
При этом крайне не рекомендуется разносить gis32acces.dll / gis64acces.dll и остальные библиотекам ГИС-ядра и вспомогательные файлы.[/B]

Поэтому самый правильный и надежный вариант - держать всё в корне приложения не переопределяя пути.
В этом случае не будет никаких конфликтов, если приложений на основе GTK на одном ПК несколько и разных версий.

Второй вариант - разместить весь комплект библиотек ГИС-ядра и вспомогательные файлы также в одной директории, про которую будет знать Windows - см. выше порядк поиска библиотек Windows (п.2-п.6).
В этом случае размещенные там библиотеки будут использоваться всеми Вашими версиями приложений на основе GTK, размещенными на этом ПК, если в их каталоге отсутствует свой комплект библиотек.
При таком подходе при старте Вашего приложения необходимо:
1. Узнать, откуда загружена основная библиотека gis32acces.dll / gis64acces.dll - GetGISAccessDirPath()
2. Установить этот же путь в GisProperty->mapSetPathShell()

Также на уровне инсталляций Ваших продуктов потребуется контроль версий, чтобы, например, при установке какой либо Вашей программы на основе GTK, библиотеки не замещались более старыми версиями.
Открытие карты SITZ, Как открыть формат SITZ или конвертировать в SITX,SIT,MAP
 
[QUOTE]Vladimir Sturza написал:
Получается, что при вашем обновлении, нам нужно установить новый ToolKit, забрать новые библиотеки и заменить старые в нашем приложении. [/QUOTE]

Более того, Вам надо пересобрать Ваше приложение на основе новой версии GTK.

Наше обновление версии GTK никак не может являться "патчем" для приложения, собранного Вами.
GTK - это инструментарий. Получаете новую версию инструментария - на основе нее выпускаете новую версию своего продукта.

[QUOTE]Vladimir Sturza написал:
Ведь проблема возникла, когда открывали новый формат в том же версии, отличающиеся только подверсией.[/QUOTE]

Как-то странно Вы себе представляете версионность продуктов.

Добавление новых возможностей в функционал продукта может осуществляться внутри версии (старшей цифры).
Само собой, "подверсии" более ранние той же версии (старшей цифры) таких возможностей иметь не будут.

Совместимость версий (и "подверсий" внутри них) поддерживается только в прямом порядке - более новая версия поддерживает возможности предыдущих, но никак не наоборот.
И то, если это не противоречит архитектурным решениям развития продукта.

Старшая цифра версии также говорит о версии продукта.
Имея купленный продукт такой версии, например GTK 13, Вы, при наличии у Вас действующей технической поддержки, получать все обновления продукта этой версии до тех пор, пока поддержка продукта осуществляется.
Прекращение поддержки продукта как правило завершается по истечении года с момента выхода следующей версии продукта. То есть, когда выйдет GTK 14, Вы согласно действующего договора технической поддержки еще целый год сможете получать обновления GTK13, либо на льготных условиях обновить продукт до новой версии и получить при этом еще год технической поддержки.

Таким образом, внутри версии с течением времени может появиться много "подверсий".
Неизменность старшей цифры версии совсем не означает, что можно взять какой либо релиз этой версии и он будет работать абсолютно также как любой другой из этой же вресии.
Тем более не стоит этого ожидать от инструментариев, которые являются скорее не самостоятельными продуктами, а "полуфабрикатами" для Ваших разработок.
Открытие карты SITZ, Как открыть формат SITZ или конвертировать в SITX,SIT,MAP
 
Почему просто не использовать новые библиотеки без каких-то подмен?
С ними у Вас и отрисовка карт корректная и формат SITZ может напрямую открываться без лишнего конвертирования.
Разработка приложений под Астра Линукс с использованием ГИС Конструктор Free для Qt Designer(версия 13) без ключа
 
При использовании ГИС Конструктор Free электронный ключ необходим на том ПК, где выполняется сборка Вашего программного продукта, который после сборки уже не будет требовать ключ.

Политика лицензирования такова, что ключей Вам требуется столько ГИС Конструктор Free, сколько компьютеров Вы используете для сборки релизной версии (которую потом поставляете своим клиентам).
Для рабочих мест разработчиков можно использовать более бюджетный вариант ГИС Конструктор - не Free.
Версии собранные в обычном ГИС Конструктор и ГИС Конструктор Free отличаются только тем, что в первом случае собранное приложение будет требовать ключ на выполнение пользовательских приложений (можно использовать ключ разработчика ГИС Конструктор), а во втором собранное в Release приложение будет работать без ключа.

Как правило, наши клиенты так и поступают: приобретают лицензии ГИС Конструктор (не Free) по количеству рабочих мест разработчиков и одну лицензию ГИС Конструктор Free для выпуска продукта.

Таким образом, отказаться от электронного ключа для сборки бесключевых релизных версий нельзя.
Открытие карты SITZ, Как открыть формат SITZ или конвертировать в SITX,SIT,MAP
 
[QUOTE]Vladimir Sturza написал:
В нашем продукте нужно открытие через диалог. Пока оно не реализовано, прошу предоставить ссылку на архив со старыми картами или дать возможность скачать их единым архивом напрямую.[/QUOTE]

Открытие через диалог Вы реализуете самостоятельно в своём приложении. Используется штатный диалог с помощью TOpenFileDialog Embarcadero.
Мы повлиять на диалог в Вашем приложении никак не можем.
Дополните Ваш диалог открытия карт возможностью распознавать расширение *.sitz в свойстве [URL=http://docwiki.embarcadero.com/Libraries/Sydney/en/Vcl.Dialogs.TOpenDialog.Filter]TOpenDialog->Filter[/URL].
На этом реализация поддержки *.sitz Вашим приложением исчерпывается.
Всё остальное GIS ToolKit уже поддерживает. Работа с *.sitz выполняется штатным образом, также как с *.map, *.sit и *.sitx.

Все векторные карты, доступные для свободного скачивания в разделе [URL=https://gisinfo.ru/price/price_map.htm]Скачать[/URL], теперь публикуются в формате SITZ.
Все наши продукты 13-ой версии поддерживают этот формат, GIS ToolKit 13 не исключение. При этом формат SITZ является нативным, не требующим преобразования, как, например, SXF, который является форматом хранения и для работы с данными в нем требуются операции импорта/экспорта.
Предоставление карт в других форматах возможно на возмездной основе по отдельному соглашению, поскольку это отдельный вид работ, влекущий за собой трудозатраты.

При желании Вы можете изменить формат SITZ на любой удобный формат.
Для этого можно воспользоваться, например, [URL=https://gisinfo.ru/products/mapview12.htm]ГИС Панорама Мини[/URL].
Изменить формат SITZ на SIT/MAP/SITX и обратно можно с помощью диалога сортировки карты (F7 - Меню-Задачи-Сортировка).
Выгрузить формат SITZ в SXF/TXF и загрузить из SXF в формат SIT/MAP/SITX/SITZ можно с помощью диалогов импорта/экспорта SXF/TXF (Меню-Файл-Экспорт в...- Файлы SXF / Меню-Файл-Импорт векторных данных из...- Файлы SXF).
Открытие карты SITZ, Как открыть формат SITZ или конвертировать в SITX,SIT,MAP
 
[URL=http://gistoolkit.ru/download/classifiers/map5000m.zip]классификатор map5000m.rsc взят с сайта[/URL]
[URL=https://gisinfo.ru/download_map/?id=63]карта Саратовской области взята с сайта[/URL]

Открыта в примере GIS ToolKit:

[IMG]https://c.radikal.ru/c07/2011/ee/673ab6a96e04.png[/IMG]


Да, в примерах GIS ToolKit диалоги открытия файла пока не знают такого расширения. Это поправим.
Но карты формата sitz открываются без проблем.

Проверьте:
1. с каким классификатором у Вас открывается карта;
2. не установлены ли в приложении параметры состава отображения, ограничивающие вывод отдельных объектов, слоев, локализаций
3. на всякий случай проверьте, нормально ли скачался у Вас файл карты, вот контрольные суммы файла ru-sar.sitz от 22.05.2020, который сейчас опубликован на сайте:  
CRC32: F3554960
MD5: BB083E2B4036A3BC95E395BABD4F0CD5
SHA-1: 9583169185B82D2088A3B35C308D9ED4151F073A
Компиляция под Builder XE5 и XE10, Ошибка в скомпилированной программе
 
Сделал тестовый пример.
Собрал и в XE5,  и в XE10.3.

Комбинации EXE(XE10.3)->DLL(XE5) и EXE(XE5)->DLL(XE10.3) работают без ошибок и в Win7 x64, и в Win10 x64.

[URL=http://public.gisinfo.ru/Forum/gtk/20201103_xe5_vs_xe10.zip]Пример тут[/URL].
Компиляция под Builder XE5 и XE10, Ошибка в скомпилированной программе
 
1. Какая версия GIS ToolKit используется?

2. Что экспортируется из Вашей библиотеки и по каким стандартам вызова? Есть ли экспорт объектов напрямую или как параметров API-функций? Соблюдается ли в этом случае требование Embarcadero по использованию менеджера памяти?

[QUOTE]
Important note about DLL memory management when your DLL uses the
static version of the RunTime Library:

If your DLL exports any functions that pass String objects (or structs/
classes containing nested Strings) as parameter or function results,
you will need to add the library MEMMGR.LIB to both the DLL project and
any other projects that use the DLL.  You will also need to use MEMMGR.LIB
if any other projects which use the DLL will be performing new or delete
operations on any non-TObject-derived classes which are exported from the
DLL. Adding MEMMGR.LIB to your project will change the DLL and its calling
EXE's to use the BORLNDMM.DLL as their memory manager.  In these cases,
the file BORLNDMM.DLL should be deployed along with your DLL.

To avoid using BORLNDMM.DLL, pass string information using "char *" or
ShortString parameters.

If your DLL uses the dynamic version of the RTL, you do not need to
explicitly add MEMMGR.LIB as this will be done implicitly for you.[/QUOTE]


[QUOTE]Vladimir Sturza написал:
Библиотеки скомпилированные в разных средах одновременно не работают. [/QUOTE]

Одновременно библиотеки, экспортирующие одинаковые функции и одноименные объекты, в один процесс загрузить нельзя.
Компиляция под Builder XE5 и XE10, Ошибка в скомпилированной программе
 
[QUOTE]Vladimir Sturza написал:
Если вызывающая библиотеку программа скомпилирована в той же среде разработки, то ошибки нет.[/QUOTE]

Скорее всего, это и есть ключ к решению проблемы.

Библиотека и вызывающий *.exe используют VCL и/или RTL библиотеки?

Если Вы хотите, чтобы DLL и EXE были независимы друг от друга, их надо собирать без runtime packages. Тогда у каждого будет свой экземпляр VCL и RTL.
В противном случае библиотека будет пытаться использовать экземпляр VCL уже загруженный в память процесса вызывающего модуля, а он от другой версии Embarcadero.

Отключение runtime packages, кстати, не очень хорошо, поскольку Embarcadero до сих пор не устранили утечку памяти при множественной загрузке VCL. Но это способ сделать библиотеку "независимой" от вызывающего процесса.

В опциях проекта уберите галку "Link with runtime packages", в "Runtime package import library" пропишите "vcl, rtl", в свойствах линковщика снимите галку "Link with Dynamic RTL".

Вот, кстати, рекомендации из readme.txt (см. п.1 и п.2)
[QUOTE]
--------------------------------------------------------------------------------
 Создание приложений в С++ Builder
--------------------------------------------------------------------------------
При настройке проекта обращайте внимание на текущую платформу и вариант сборки.
По возможности надо делать настройки для Варианта All Configurations-All Platforms.

1. В опциях проекта для раздела С++ Linker параметр Link with Dynamic RTL должен
   иметь значение false.

2. В опциях проекта для раздела Packages\Runtime Packages параметр Link with
   runtime  packages должен иметь значение false, либо для раздела Packages для
   параметра Design packages надо отменить разрешение для пакета GIS ToolKit
   Professional.

3. В проект надо добавить библиотеки:
   - для x32 - gis32acces.lib;
   - для x64 - gis64acces.a.

4. Если в проекте используется статическая линкова библиотек ГИС-ядра (кроме
   gisuacces.lib или gisu64acces.a) для прямого вызова функций MAPAPI, то для
   таких библиотек надо в проект подключить аналогичный файл *.lib (*.a).
   Библиотеки находятся в директории  Создать Gistool13\Dll\X32\lib
   (Gistool13\Dll\X64\lib). Пересоздать эти файлы можно выполнив команду
   Gistool13\Dll\X32\build_lib.bat (Gistool13\Dll\X64\build_a.bat).[/QUOTE]
Страницы: 1 2 3 4 5 6 7 8 9 10 11 ... 95 След.



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

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