Валентин Скирдин
vskirdin@mail.ru
Замечание
Всем, кто хоть раз пробовал писать плагины для FAR Manager,
известен заголовочный файл PLUGIN.HPP (его можно найти здесь:
%FAR%\PlugDoc.rar:plugin.hpp - ред: начиная с FAR 1.70 beta 5 примеры
устанавливаются в отдельный каталог PlugDoc). Но, к сожалению (с моей точки
зрения), это чистой воды полуфабрикат. Здесь я предлагая некоторые
"доработки" этого заголовочного файла, т.с. приведение содержимого файла
к некоему стандарту. Доработок совсем немного, но эти доработки
(IMHO) весьма полезные.
Первое, что мы сделаем - исключим повторную прекомпиляцию PLUGIN.HPP (это тот этап, на котором компилятор наполняет свои внутренние таблицы информацией из C/CPP и H/HPP -файлов - имена, типы, and etc.). Для этого достаточно в начало PLUGIN.HPP следующие строки:
#ifndef __PLUGIN_HPP #define __PLUGIN_HPP //#include <windows.h>
...а самой последней строкой поставить:
#endif // __PLUGIN_HPP
На втором этапе внесем некоторые коррекции для директив компиляции, с учетом знаний о компиляторе LCC-Win32...
...
#elif defined(__GNUC__) || (defined(__WATCOMC__) && (__WATCOMC__ < 1100)) || defined(__LCC__)
#pragma pack(1)
#if defined(__LCC__)
#define _export __declspec(dllexport)
#endif
#else
...
...в конце необходимо тоже внести изменения:
... #elif defined(__GNUC__) || (defined(__WATCOMC__) && (__WATCOMC__ < 1100)) || defined(__LCC__) #pragma pack() #else ...
Третий этап - перечислим прототипы всех экспортируемых API-функций. Но сделаем это несколько необычно - заключим прототипы в "скобки" (выделено), а также учтем "пожелания" компилятора LCC-Win32 (по поводу остальных компиляторов ничего не скажу, т.к. "общался" только с Borland C и LCC-Win32):
#if defined(__BORLANDC__)
#ifdef __cplusplus
extern "C" {
#endif
void WINAPI _export ClosePlugin(HANDLE hPlugin);
.
.
.
int WINAPI _export ProcessEditorEvent(int Event,void *Param);
#ifdef __cplusplus
};
#endif
#endif
Многие компиляторы, встретив файл с расширением CPP, переключаются в режим С++. А в этом режиме, как известно, имена функций "коверкаются" компилятором с тем, чтобы была возможность перегрузки имен функций (более детальную информацию по этому вопросу смотрите в учебниках по С++ - например здесь). Но так, как FAR Manager ожидает от нашего плагина вполне конкретные имена функций, то...
И, напоследок, скопируем полученный файл PLUGIN.HPP в каталог INCLUDE с тем, чтобы не размножать на диске копии этого файла, а просто взять и в исходнике написать:
#include <plugin.hpp>
Кстати, тоже самое проделайте и с FMT.HPP (если, конечно, пишите плагины второго уровня для плагина MultiArc)
02.01.2000
Rev 13.02.2000