12.2. Создание библиотеки |
Вверх Предыдущий Следующий |
Создание библиотек поддерживается в любом режиме компилятора Free Pascal, но может случиться так, что значения аргументов или возвращаемых результатов будут отличаться, если библиотека скомпилирована в двух разных режимах. Например, если ваша функция принимает целочисленный аргумент (типа Integer), то библиотека будет принимать целые числа разных размеров, если вы компилируете её в режимах Delphi или TP. Библиотека создаётся как программа, только используется ключевое слово library, и имеется раздел exports. В следующем листинге приведён пример простой библиотеки: Листинг: progex/subs.pp { Пример библиотеки } Функция SubStr не должна быть объявлена в файле самой библиотеки. Она может быть объявлена в разделе интерфейса (interface) модуля, который используется библиотекой. В результате компиляции этого исходного кода будет создана библиотека с именем libsubs.so для UNIX-систем, или subs.dll для WINDOWS или OS/2. Компилятор сам позаботится о создании всех дополнительных связей, которые требуются для создания общедоступной библиотеки. Библиотека экспортирует одну функцию: SubStr. Это важный момент. В том случае, когда функция имеется в разделе exports, она будет экспортироваться. Если вы хотите, чтобы ваша функция вызывалась из программы, созданной с помощью другого компилятора, важно соблюдать правильность соглашения о вызовах для экспортируемых функций. Так как программы, созданные с помощью других компиляторов, не знают о соглашениях о вызовах Free Pascal, ваша функция будет вызвана неправильно, в результате чего будет повреждён стек. В WINDOWS большинство библиотек используют соглашение о вызовах stdcall, так что может быть лучше использовать именно его, если ваша библиотека будет работать в системах WINDOWS. В большинстве систем UNIX используется соглашения о вызовах C, поэтому следует использовать модификатор cdecl. |