Глава 10: Особенности MapBasic всреде Microsoft Windows
222 MapBasic Руководство пользователя
Объявление и использование динамических библиотек
(DLL)
Динамические библиотеки Windows (Dynamic Link Library, DLL) – это
файлы, содержащие выполняемые процедуры и другие ресурсы. Вы
можете использовать DLLфайл как библиотеку внешних процедур и
обращаться к ним из программы MapBasic с помощью оператора Call.
Многие DLLбиблиотеки поставляются вместе с программами, а также
отдельно. Каждая обычно снабжается документацией, описывающей
процедуры и их параметры. Для того, чтобы можно было вызывать
DLLпроцедуру из Вашей MapBasicпрограммы, Вы должны объявить
ее оператором Declare так же, как и собственные процедуры. В
операторе Declare Вы объявляете имя DLLфайла, имя процедуры и
описываете ее параметры. Предложение Alias позволяет, если нужно,
переименовать DLLпроцедуру для избежания конфликтов с уже
существующими в программе именами.
Вы можете вызвать DLLфункцию так же, как и собственную функцию
MapBasic, объявив ее сначала c помощью оператора Declare Function и
затем обращаясь к ней из текста. (См. в Справочнике MapBasic
описание операторов Declare Sub и Declare Function.) DLLфайл
должен быть доступен программе во время ее работы.
Подробно строение DLLфайлов описано в документации к Windows
Software Developer's Kit (SDK), а также в книгах независимых авторов.
Объявление внешней библиотеки
Предложение Lib libname в операторе Declare сообщает MapBasic, где
находится динамическая библиотека "libname". Среда Windows
содержит несколько стандартных библиотек, входящих в состав
системы. Вы можете в качестве параметра libname объявить “User”,
“GDI”, “Kernel” или любую из стандартных DLLбиблиотек Windows.
При объявлении других DLLбиблиотек параметр libname должен
включать в себя DOSмаршрут:
Declare Sub mydll Lib "C:\dlls\mydll.dll" (ByVal x
As Integer,
ByVal y As Integer)
Если явно задать DOSмаршрут в операторе Declare (например,
“C:\LIB\MYLIB.DLL”), MapInfo постарается загрузить именно этот
DLLфайл. Если этого файла там нет, то MapInfo его не загрузит, что
повлечет ошибку.
Если оператор Declare не задает явного пути к DDLбиблиотеке, то
MapInfo будет искать его по следующим правилам:
1. Если DLL находится в том же каталоге, что и MBXфайл, то
MapInfo загружает DLL, иначе