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