DLL-система плагинов C++

Я хотел бы добавить систему плагинов dll в свое приложение на С++.

Прочитав все, что смог найти по теме, я буду использовать интерфейс класса, который имеет только чистые виртуальные функции и базовые типы данных. Каждая подключаемая DLL-библиотека будет получать классы из этого интерфейса и предоставлять их с помощью механизма регистрации. Он будет включать механизм уничтожения, гарантирующий, что new и delete для этого класса не будут вызываться через границу DLL.

Но куда мне импортировать и экспортировать интерфейс? Нужно ли мне делать своего рода фиктивную DLL без кода, только экспортируя объявление класса? Или я могу никуда не импортировать/экспортировать класс и просто использовать его как заголовок как в приложении, так и в плагинах, передавая только указатели на класс между приложением и плагинами?

Спасибо


person galinette    schedule 03.12.2014    source источник


Ответы (1)


Я предлагаю вам следующий подход:

  • Объявите интерфейс вашего плагина внутри общего заголовочного файла (используемого приложением и плагином)
  • Ваш интерфейс должен иметь только виртуальные чистые методы = 0, без элементов данных.
  • Виртуальные методы должны использовать только примитивные типы и структуры (как интерфейс C). Это для совместимости с ABI. Таким образом, плагин может быть разработан с использованием различных компиляторов.
  • Интерфейс плагина должен предоставлять два метода: CreateObject() и FreeObject(). Код ABI DLL знает, как создать свой объект и удалить свой объект.

Я надеюсь, что это может помочь вам.

person AngeloDM    schedule 03.12.2014
comment
Итак, мне не нужно экспортировать классы интерфейса, просто чтобы поделиться заголовком. - person galinette; 11.12.2014