Прежде чем пытаться менять расположение файлов, необходимо понимать физику процессов, происходящих в приложении.
Цитата |
---|
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, библиотеки не замещались более старыми версиями.