Вы можете начать с базового класса, определяющего конкретный интерфейс плагина, а именно: TextTransformPlugin, с методом, принимающим строку и возвращающим строку (виртуальную).
Каждый плагин наследовал бы от этого интерфейса, и вы создаете этот класс, например: SpanishTranslateTransformPlugin в динамической библиотеке (.so файл).
Из программы вы используете dlopen, чтобы открыть библиотеку (см. здесь для примера C ++). Поскольку вы не можете вызвать конструктор класса, в библиотеке so вы определяете стандартную функцию (одно и то же имя для всех плагинов, скажем, create () и присваивает ей соглашения о вызовах C, чтобы затем вы могли использовать dlsym для получения символа и приведения это функция, возвращающая TextTransformPlugin и вызывающая его.
extern "C" {
TextTransformPlugin * create(); // this would return new SpanishTranslateTransformPlugin
}
Таким образом, вы получите объект TextTransformPlugin, который является плагином. Поскольку методы интерфейса являются виртуальными, будут вызваны конкретные методы.
Вам нужно будет позаботиться о жизненном цикле плагина, сохраняя его в реестре. Знать, когда их использовать, и, наконец, уничтожить их и закрыть библиотеки.
Обратите внимание, что в Windows нет dlfcn.h, где вы найдете dlopen. В API LoadLibrary есть аналогичные функциональные возможности, но вам придется самостоятельно абстрагировать платформы.
Если вы используете многоплатформенный фреймворк, такой как Qt, вы получаете много стандартного образца бесплатно, и он будет работать на всех поддерживаемых платформах. Вот пример применения сменной краски:
http://doc.qt.nokia.com/latest/tools-plugandpaint.html
Как вы уже упоминали, вы используете wxWidgets, это должна быть эквивалентная функциональность для нескольких платформ:
http://docs.wxwidgets.org/2.8/wx_wxdynamiclibrary.html и полный пример: http://wiki.wxwidgets.org/Programs_That_Support_Plugins