Возможно ли сделать объектно-ориентированное API через DLL (GCC, C++)?

Добрый день.
Вопрос следующий — пусть есть абстрактное приложение, к которому хочется добавить некоторое API для плагинов. Плагины скорее всего будут представлять собой DLL'ки, которые динамически подгружаются основным кодом.
В Java можно сделать интерфейс IPlugin, а в плагине расширить его: public class MySuperPlugin implements IPlugin, после чего спокойно подгружать тысячи классов по именам. Можно ли сделать что-то похожее в C++? Я знаю, что можно спокойно подгружать обычные функции (не члены класса) из DLL. Пока придумались только такие костыли: делаем много функций «переходников», каждая из которых вызывает соответствующий член класс. Но это ужас.
Как решить? Ведь, наверное, можно.
  • Вопрос задан
  • 2996 просмотров
Решения вопроса 1
SlaX
@SlaX
Можно. Для этого нужно написать обычную функцию типа:

extern "C" IPlugin * getPluginInterface()
{
    return new Plugin();
}


Если код для винды нужно еще добавить __declspec (dllexport) после extern «C».
И все. Теперь можно загрузить библиотеку динамически и спросить адрес функции по имени с помощью dlsym( для Linux ), для винды не помню.
Ответ написан
Пригласить эксперта
Ответы на вопрос 1
Gorthauer87
@Gorthauer87
Программист
Да точно также и делается всё. Делаем абстрактный класс, делаем фабрику этих самых классов, а она уже как хочет их создает и из любых либ.
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы