Сведения о вопросе

Solllo

13:48, 1st August, 2020

Теги

API   ООП   C++   GCC   DLL    

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

Просмотров: 314   Ответов: 2

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



  Сведения об ответе

PHPH

10:27, 2nd August, 2020

Можно. Для этого нужно написать обычную функцию типа:


extern "C" IPlugin * getPluginInterface()

{

    return new Plugin();

}



Если код для винды нужно еще добавить __declspec (dllexport) после extern «C».
И все. Теперь можно загрузить библиотеку динамически и спросить адрес функции по имени с помощью dlsym( для Linux ), для винды не помню.


  Сведения об ответе

PHPH

20:37, 24th August, 2020

Да точно также и делается всё. Делаем абстрактный класс, делаем фабрику этих самых классов, а она уже как хочет их создает и из любых либ.


Ответить на вопрос

Чтобы ответить на вопрос вам нужно войти в систему или зарегистрироваться