C++ plugin dll система

Бих искал да добавя dll плъгин система към моето c++ приложение.

След като прочетох всичко, което можах да намеря по темата, ще използвам интерфейс на клас, който има само чисти виртуални функции и основни типове данни. Всяка 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