7.3.2. Отсутствующие вызовы и API несовместимость

На верх  Назад  Вперёд

Delphi сильно привязана к Windows. Поэтому она содержит множество ориентированных на Windows API функций (таких как поиск и открытие файлов, загрузка библиотек).

Free Pascal изначально разрабатывался для использования на разных платформах, поэтому некоторые функции, очень специфические для Windows, в Free Pascal отсутствуют. Перечисленные ниже основные пункты должны быть хорошо осмыслены.

По умолчанию Free Pascal генерирует консольные приложения. Это означает, что при разработке программ для Windows вы должны явно включить тип приложения в исходном коде:
 
{$APPTYPE GUI}
 

Модуль Windows предоставляет доступ к большинству основных функций API Win32. Одинаковые функции могут иметь различный список параметров: вместо объявления параметра, переданного по ссылке (var), используется указатель (как в С). Для большинства случаев Free Pascal предоставляет перегруженные версии таких функций.

Widestrings. Управление Widestrings не автоматизировано в Free Pascal, так как различные платформы имеют различные методы расшифровки Widestrings и Multi-Byte Character Sets. FPC поддерживает Widestrings, но не всегда использует такую же кодировку, что и Windows. Учтите, что для правильной работы с Widestrings, вам необходимо подключать модуль cwstring для платформ Unix/LINUX. Этот модуль инициализирует менеджер Widestrings с необходимыми функциями, которые используют библиотеку С для выполнения всех необходимых функций.

Потоки. В настоящий момент Free Pascal не предоставляет управление потоками для всех платформ. В Unix потребуется связь с библиотеками С, если имеется необходимость получить управление потоками в приложении FPC. Это означает, что модуль cthreads должен быть подключен для управления потоками. Имеется множество примеров SetLastOSError. Это не поддерживается и не будет поддерживаться.

Чувствительность к регистру имён файлов. Pascal – это не чувствительный к регистру язык, поэтому используемые имена также должны быть не чувствительны к регистру символов. Free Pascal гарантирует нечувствительность к регистру путём поиска файлов с именами в нижнем регистре. Kylix этого не гарантирует, поэтому могут возникнуть проблемы при наличии двух файлов с одинаковыми именами в разных регистрах.

RTTI не сохраняется таким же путём, как в Delphi. Формат максимально совместим, но может отличаться. Это не должно вызвать проблем, если используются API модуля TypeInfo и не выполняется попыток прямого доступа к RTTI.

По умолчанию размер множеств отличается от размера, принятого в Delphi. Но установить размер можно директивой компилятора или опцией командной строки. Аналогично, размер перечисляемых типов по умолчанию отличается от размера, принятого в Delphi. Опять же, установить размер можно директивой компилятора или опцией командной строки.

В общем случае не делается предположений о внутренней структуре сложных типов, таких как записи, объекты, классы и связанные с ними структуры. Например, макет таблицы VMT отличается, выравнивание полей в записи может отличаться и т.п. То же можно сказать про основные типы: на разных процессорах старший и младший байты слова или целого числа могут размещаться в разных местах как на процессоре Intel.

Имена локальных переменных и аргументы методов не должны совпадать с именами свойств или полей класса: это плохая привычка, так как это может привести к конфузам, связанным с одинаковыми именами.