Предполагая Win32api, вы делаете что-то вроде этого:
- Есть каталог плагинов для вашего приложения.
- При загрузке приложения перечислите все файлы в этом каталоге
- Любой с расширением DLL загружается с помощью вызова LoadLibrary .
- Вы получаете некоторую информацию от dll, которая говорит вам, как зовут плагин
- Вы соответствующим образом создаете изменения меню / пользовательского интерфейса.
Теперь, когда вы создаете свою DLL, у вас есть стандартный набор функций, общих для всех плагинов. Или стандартный набор функций для каждого типа плагина и функция, которая идентифицирует это с вашим приложением. Таким образом, вы можете протестировать каждый плагин правильной формы и на лету вызывать методы в динамической библиотеке без необходимости компилировать / связывать их с вашей основной программой.
Процедура в целом похожа на любую платформу, которая поддерживает общие библиотеки (DLL и т. Д.).
В качестве примера кода, который я имею в виду, у вас может быть файл plugin.h, подобный этому:
#ifndef PLUGIN_H_
#define PLUGIN_H_
#define PLUGIN_CRYPTO 1
#define PLUGIN_FORMAT 2
#define PLUGIN_EXAMPLE 3
#endif
Затем вы # включаете этот заголовок как в основную программу, так и во все создаваемые плагины. В plugin-dll.cpp (снова пример) у вас есть такой метод:
int GetPluginType()
{
return PLUGIN_CRYPTO;
}
Затем вы можете переключаться между результатами этой функции и назначать указатели функций для правильных подпрограмм, которые вы хотите запустить.
Подробнее об имплантации:
Только потому, что Linux (POSIX) эквиваленты:
- dlopen - Динамическая библиотека открыта.
- dlsym - эквивалент GetProcAddress - получить функцию ptr для имени символа.
- dlclose - эквивалент FreeLibrary