Как изменить рабочий каталог из Map Basic?
-
- Новоприбывший
- Сообщения: 8
- Зарегистрирован: 09 июн 2009, 16:59
- Репутация: 0
- Контактная информация:
Как изменить рабочий каталог из Map Basic?
Собственно вопрос как программно выбрать рабочий каталог, например после того как пользователь открыл слой с помощью меню файл->открыть? т.к. после этого рабочим каталогом становится тот откуда открыт файл, а необходимо что бы рабочим каталогом был тот в котором лежит скрипт иначе не удаётся вызвать процедуру из dll...
возможно что то сталкивался подскажите либо как изменить рабочий каталог либо как обойти эту особенность...
возможно что то сталкивался подскажите либо как изменить рабочий каталог либо как обойти эту особенность...
-
- Новоприбывший
- Сообщения: 8
- Зарегистрирован: 09 июн 2009, 16:59
- Репутация: 0
- Контактная информация:
Re: Как изменить рабочий каталог из Map Basic?
замечена еще одна особенность: если *.mbx и *.dll лежат рядом с mapinfo.exe то все нормально, кто знает какие пути по умолчанию просматривает MI ?
-
- Завсегдатай
- Сообщения: 257
- Зарегистрирован: 10 июн 2009, 12:21
- Репутация: 0
- Откуда: Екатеринбург
- Контактная информация:
Re: Как изменить рабочий каталог из Map Basic?
Вызов функции 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 проводит по тем же
правилам.
Для определения каталога, в котором установлена программа 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 проводит по тем же
правилам.
-
- Новоприбывший
- Сообщения: 8
- Зарегистрирован: 09 июн 2009, 16:59
- Репутация: 0
- Контактная информация:
Re: Как изменить рабочий каталог из Map Basic?
Спасибо,
но почему не выполняется вот этот пункт?
>1. Если DLL находится в том же каталоге, что и MBX-файл, то MapInfo Professional загружает
>DLL
>путь к своей dll прописывается в ее объявлении оператором Declare
если я в Declare указал просто название то это разве не подразумевает что dll расположена в томже каталоге?
да ApplicationDirectory$( ) возвращает правильное название папки но как его применить для Declare ?
просто изначально хотелось что бы скрипт т.е. *.MBX небыл привязан к какому-то конкретному пути... отсюда и проблема.
но почему не выполняется вот этот пункт?
>1. Если DLL находится в том же каталоге, что и MBX-файл, то MapInfo Professional загружает
>DLL
>путь к своей dll прописывается в ее объявлении оператором Declare
если я в Declare указал просто название то это разве не подразумевает что dll расположена в томже каталоге?
да ApplicationDirectory$( ) возвращает правильное название папки но как его применить для Declare ?
просто изначально хотелось что бы скрипт т.е. *.MBX небыл привязан к какому-то конкретному пути... отсюда и проблема.
-
- Завсегдатай
- Сообщения: 257
- Зарегистрирован: 10 июн 2009, 12:21
- Репутация: 0
- Откуда: Екатеринбург
- Контактная информация:
Re: Как изменить рабочий каталог из Map Basic?
/удалила свое неправильное предложение/
Последний раз редактировалось reasonat 15 июн 2009, 13:12, всего редактировалось 1 раз.
-
- Новоприбывший
- Сообщения: 8
- Зарегистрирован: 09 июн 2009, 16:59
- Репутация: 0
- Контактная информация:
Re: Как изменить рабочий каталог из Map Basic?
>Declare Function fname Lib ApplicationDirectory$() + "mylib.dll" () As return_type
при таком объявлении функции, скрипт не компилируется.
при таком объявлении функции, скрипт не компилируется.
-
- Завсегдатай
- Сообщения: 257
- Зарегистрирован: 10 июн 2009, 12:21
- Репутация: 0
- Откуда: Екатеринбург
- Контактная информация:
Re: Как изменить рабочий каталог из Map Basic?
действительно, сказала бред, прошу прощения, ввожу в заблуждение.
Вроде всегда указывали название файла, без пути к папке, и MapInfo обнаруживала dll, сложенные в папку с программой mbx, либо в системный каталог Windows.
Вроде всегда указывали название файла, без пути к папке, и MapInfo обнаруживала dll, сложенные в папку с программой mbx, либо в системный каталог Windows.
-
- Новоприбывший
- Сообщения: 8
- Зарегистрирован: 09 июн 2009, 16:59
- Репутация: 0
- Контактная информация:
Re: Как изменить рабочий каталог из Map Basic?
вот в том то и дело что "обычно". У меня тоже все работает покуда пользователь не решит открыть другой файл... вот в этот момент и появляется описанное выше исключение.
Спасибо за участие в обсуждении этой особенности, пришлось просто копировать свои файлы в папку к mapInfo.exe, хорошо что хоть путь в реестре получилось найти
Спасибо за участие в обсуждении этой особенности, пришлось просто копировать свои файлы в папку к mapInfo.exe, хорошо что хоть путь в реестре получилось найти

-
- Новоприбывший
- Сообщения: 1
- Зарегистрирован: 15 фев 2011, 12:16
- Репутация: 0
Re: Как изменить рабочий каталог из Map Basic?
Вариант решения проблемы --- использовать стандартную функцию 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
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
Кто сейчас на конференции
Сейчас этот форум просматривают: нет зарегистрированных пользователей и 3 гостя