Как изменить рабочий каталог из Map Basic?

MapInfo, MapBasic
Ответить
Conkistador
Новоприбывший
Сообщения: 8
Зарегистрирован: 09 июн 2009, 16:59
Репутация: 0
Контактная информация:

Как изменить рабочий каталог из Map Basic?

Сообщение Conkistador »

Собственно вопрос как программно выбрать рабочий каталог, например после того как пользователь открыл слой с помощью меню файл->открыть? т.к. после этого рабочим каталогом становится тот откуда открыт файл, а необходимо что бы рабочим каталогом был тот в котором лежит скрипт иначе не удаётся вызвать процедуру из dll...

возможно что то сталкивался подскажите либо как изменить рабочий каталог либо как обойти эту особенность...
Conkistador
Новоприбывший
Сообщения: 8
Зарегистрирован: 09 июн 2009, 16:59
Репутация: 0
Контактная информация:

Re: Как изменить рабочий каталог из Map Basic?

Сообщение Conkistador »

замечена еще одна особенность: если *.mbx и *.dll лежат рядом с mapinfo.exe то все нормально, кто знает какие пути по умолчанию просматривает MI ?
reasonat
Завсегдатай
Сообщения: 257
Зарегистрирован: 10 июн 2009, 12:21
Репутация: 0
Откуда: Екатеринбург
Контактная информация:

Re: Как изменить рабочий каталог из Map Basic?

Сообщение reasonat »

Вызов функции ApplicationDirectory$( ) из приложения поможет Вам определить каталог (или папку), из которого была запущена прикладная программа. Если в данный момент никаких приложений не загружено (Вы вызвали функцию в окне MapBasic), то функцией возвращается пустая строка.
Для определения каталога, в котором установлена программа MapInfo, используйте функцию ProgramDirectory$( ).


T.е. если dll лежат рядом с запущенной mbx, то ApplicationDirectory$( ) поможет указать путь к ним.

А вообще, путь к своей dll прописывается в ее объявлении оператором Declare
В руководстве пользователя все описано:
Если в операторе Declare указан явный адрес библиотеки (например, “C:\lib\mylib.dll”),
MapInfo Professional будет пытаться загружать DLL из этого места. Если этого файла там нет,
то MapInfo его не загрузит, что повлечет ошибку. Если оператор Declare не задает явного пути
к DDL-библиотеке (например, “mylib.dll”), то MapInfo будет искать его по следующим
правилам:
1. Если DLL находится в том же каталоге, что и MBX-файл, то MapInfo Professional загружает
DLL, иначе
2. Если DLL находится в том же каталоге, что и MapInfo, то MapInfo Professional загружает
DLL, иначе
3. Если DLL находится в каталоге WINDOWS\SYSTEM, то MapInfo Professional загружает
DLL, иначе
4. Если DLL находится в каталоге WINDOWS, то MapInfo Professional загружает DLL, иначе
5. MapInfo Professional проводит поиск по каталогам, заданным в системной переменной
PATH.
Поиск растровых файлов для иконок и курсоров MapInfo Professional проводит по тем же
правилам.
Conkistador
Новоприбывший
Сообщения: 8
Зарегистрирован: 09 июн 2009, 16:59
Репутация: 0
Контактная информация:

Re: Как изменить рабочий каталог из Map Basic?

Сообщение Conkistador »

Спасибо,
но почему не выполняется вот этот пункт?
>1. Если DLL находится в том же каталоге, что и MBX-файл, то MapInfo Professional загружает
>DLL

>путь к своей dll прописывается в ее объявлении оператором Declare
если я в Declare указал просто название то это разве не подразумевает что dll расположена в томже каталоге?

да ApplicationDirectory$( ) возвращает правильное название папки но как его применить для Declare ?

просто изначально хотелось что бы скрипт т.е. *.MBX небыл привязан к какому-то конкретному пути... отсюда и проблема.
reasonat
Завсегдатай
Сообщения: 257
Зарегистрирован: 10 июн 2009, 12:21
Репутация: 0
Откуда: Екатеринбург
Контактная информация:

Re: Как изменить рабочий каталог из Map Basic?

Сообщение reasonat »

/удалила свое неправильное предложение/
Последний раз редактировалось reasonat 15 июн 2009, 13:12, всего редактировалось 1 раз.
Conkistador
Новоприбывший
Сообщения: 8
Зарегистрирован: 09 июн 2009, 16:59
Репутация: 0
Контактная информация:

Re: Как изменить рабочий каталог из Map Basic?

Сообщение Conkistador »

>Declare Function fname Lib ApplicationDirectory$() + "mylib.dll" () As return_type
при таком объявлении функции, скрипт не компилируется.
reasonat
Завсегдатай
Сообщения: 257
Зарегистрирован: 10 июн 2009, 12:21
Репутация: 0
Откуда: Екатеринбург
Контактная информация:

Re: Как изменить рабочий каталог из Map Basic?

Сообщение reasonat »

действительно, сказала бред, прошу прощения, ввожу в заблуждение.
Вроде всегда указывали название файла, без пути к папке, и MapInfo обнаруживала dll, сложенные в папку с программой mbx, либо в системный каталог Windows.
Conkistador
Новоприбывший
Сообщения: 8
Зарегистрирован: 09 июн 2009, 16:59
Репутация: 0
Контактная информация:

Re: Как изменить рабочий каталог из Map Basic?

Сообщение Conkistador »

вот в том то и дело что "обычно". У меня тоже все работает покуда пользователь не решит открыть другой файл... вот в этот момент и появляется описанное выше исключение.
Спасибо за участие в обсуждении этой особенности, пришлось просто копировать свои файлы в папку к mapInfo.exe, хорошо что хоть путь в реестре получилось найти :)
kamenzkp
Новоприбывший
Сообщения: 1
Зарегистрирован: 15 фев 2011, 12:16
Репутация: 0

Re: Как изменить рабочий каталог из Map Basic?

Сообщение kamenzkp »

Вариант решения проблемы --- использовать стандартную функцию WIndows SetCurrentDirectory. Пример

Declare Function SetCurrentDirectory Lib "kernel32.dll" Alias "SetCurrentDirectoryA" (ByVal lpPathName As String) As Integer
Declare Function myfunc Lib "mydll.dll" (ByVal v as Integer) as Integer

Sub example
Dim i as Integer
i = SetCurrentDirectory(ApplicationDirectory$())
i = myfunc(0)
End Sub
Ответить

Вернуться в «MapInfo»

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и 3 гостя