В продолжение статьи "Как настроить Alignment" Игоря Павлова, я пишу здесь объяснения того, как установить правильное выравнивание при компиляции плагинов для FAR, используя LCC-WIN32 или Borland C++ 5.5 (free commandline tool).
Вы должны найти файл, который называется win.h в каталоге lcc\include\.
Затем ищете в нём строку "WIN32_FIND_DATA", вы увидите определение структуры
подобно этому:
typedef struct _WIN32_FIND_DATA {
DWORD dwFileAttributes;
FILETIME ftCreationTime;
FILETIME ftLastAccessTime;
FILETIME ftLastWriteTime;
DWORD nFileSizeHigh;
DWORD nFileSizeLow;
DWORD dwReserved0;
DWORD dwReserved1;
TCHAR cFileName[MAX_PATH];
TCHAR cAlternateFileName[14];
WORD dummy;
} WIN32_FIND_DATA,*LPWIN32_FIND_DATA,*PWIN32_FIND_DATA;
Для правильной компиляции plugin.hpp или для получения размера структуры
PluginPanelItem 366 байт нам нужно,
чтобы вышеупомянутая структура была
равна 318 байтам, единственное что мешает этому, так это поле 'WORD dummy' в
конце структуры, которое не нужно в этой структуре и добавлено автором LCC
по причине, мне неизвестной (может он тоже был озабочен выраниванием :). Так
что оно может быть удалено, просто закомментируйте строчку с фиктивной
переменной. Вы всё сделали, теперь вы можете счастливо компилировать ваш
плагин, только не забудьте использовать ключ -Zp2, чтобы установить
выравнивание в 2 байта.
P.S. также не забудьте установить
ключ -nounderscores при линковке, чтобы имена функций экспортировались
правильно.
Вы должны найти файл, называемый winbase.h в каталоге bcc\include\.
Затем в начале файла вы увидите что-то вроде этого:
#ifndef _WINBASE_ #pragma option push -b -a8 -pc -A- /*P_O_Push*/ #define _WINBASE_
Для правильной компиляции plugin.hpp или для получения размера структуры
PluginPanelItem 366 байт нам
нужно, чтобы вышеупомянутая структура была равна 318 байтам. Чтобы установить этот размер,
нужно компилировать winbase.h с выравниванием 2 байта, для чего вы должны
изменить "-a8" на "-a2" в описанных выше строках.
Другая проблема - проверка размера структуры PluginPanelItem
в plugin.hpp.
Выглядит это так:
#if defined(__BORLANDC__) #if sizeof(PluginPanelItem) != 366 #if defined(STRICT) #error Incorrect alignment: sizeof(PluginPanelItem)!=366 #else #pragma message Incorrect alignment: sizeof(PluginPanelItem)!=366 #endif #endif #endif
В Borland C++ 5.5 команда "sizeof(PluginPanelItem)" делает не то, что
ожидалось, так что вы всегда будете получать эту ошибку. Что вам нужно сделать, так
это изменить строку на "sizeof(struct PluginPanelItem) != 366" чтобы
сделать это очевидным. Вы всё сделали, теперь вы можете счастливо компилировать
ваш плагин, только не забудьте использовать ключ -a2, чтобы установить
выравнивание в 2 байта.
04.12.2001