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

Переопределение пути для основных библиотек и WMS-файлов

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

Привожу выдержку кода из программы, в котором пытаюсь переопределить путь

UnicodeString WMSPath,WMSPath2,WMSPath3;

WMSPath2 = GetGISAccessDirPath();  // = Application->ExeName
WMSPath3 = GetGISAccessFilePath(); // = Application->ExeName + gis32acces.dll

// пытаюсь переопределить путь
WMSPath = ExtractFilePath(Application->ExeName) + "WMS\\";
GisProperty->mapSetPathShell(WMSPath);

// путь не переопределился
WMSPath2 = GetGISAccessDirPath();  // = Application->ExeName
WMSPath3 = GetGISAccessFilePath(); // = Application->ExeName + gis32acces.dll

Что я делаю не так?
 
Функция GetGISAccessDirPath возвращает путь, откуда стартовала библиотека gisacces,

А функция  mapSetPathShell устанавливает в ГИС-ядре путь к директории приложения, в  которой располагаются общие и вспомогательные файлы для функционирования  ГИС-ядра (библиотеки условных знаков *.iml, файлы базы данных EPSG, wmslist.ini,  xml-схемы и пр.). Путь к данной директории рекомендуется устанавливать при  запуске приложения. Функция не влияет на расположение dll ГИС-ядра. Гис-ядро к этому моменту уже стартовало из директории, определяемой согласно логике Windows. Поэтому в readme.txt рекомендовано устанавливать dll ГИС-ядра в определенную одну директорию вместе с сопутствующими файлами. Расположение сопутствующих файлов для работы ГИС-ядра указываются при старте приложения через mapSetPathShell. Выдержка из readme^

"Добавить в переменную PATH окружения Windows вышеуказанные

   директории. Для этого в меню Windows Пуск/Компьютер по правой кнопке мыши

   выбрать Cвойства. В появившемся окне выбрать меню Дополнительные параметры

   системы, далее Переменные среды, далее для параметра Системные переменные

   найти параметр PATH и нажать кнопку изменить (после чего добавить к списку

   общедоступных директорий нужные). Данный вариант является более надежным

   в использовании."

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

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

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

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

либо, если Вы не используете компоненты 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

При этом крайне не рекомендуется разносить gis32acces.dll / gis64acces.dll и остальные библиотекам ГИС-ядра и вспомогательные файлы.


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

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

Также на уровне инсталляций Ваших продуктов потребуется контроль версий, чтобы, например, при установке какой либо Вашей программы на основе GTK, библиотеки не замещались более старыми версиями.
 
Спасибо, за пояснение. Выбран путь, что собственные библиотеки работающие с ГИС и ГИС-ядро расположены в одном каталоге, что, в принципе не противоречит, написанному выше. Вариант с системной переменной не подходит, потому что может содержаться несколько версий собственных приложений, а соответственно и библиотек.
Страницы: 1
Читают тему (гостей: 1)



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

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