Как вы открываете функциональность библиотеки плагинов? - PullRequest
3 голосов
/ 24 декабря 2011

Если у меня есть программа foo.exe и она загружает плагин bar.dll во время выполнения, как я могу позволить коду в bar.dll использовать классы из foo.exe?И будет ли возможно bar.dll извлекать классы из foo.exe?Кроме того, решение будет кросс-платформенным?

РЕДАКТИРОВАТЬ: Вот еще что я пытаюсь сделать:


//foo.exe
class Node {
public:
    void SetName(const string& n) { ... }
    const string& GetName() { ... }
};

//bar.dll
class TransformNode : public Node {
public:
    void DoSomething() {
        SetName(...);   //basically, can I inherit functionality from foo.exe (SetName and GetName) 
                        //and reuse the code in a derived class in bar.dll?
    }
};

Ответы [ 2 ]

2 голосов
/ 24 декабря 2011

Чтобы позволить bar.dll использовать классы из foo.exe, вам нужно передать экземпляр класса с виртуальными функциями из foo.exe в bar.dll.Bar.dll будет вызывать виртуальные функции, полученные из foo.exe.


Да, для bar.dll возможно передать производные предложения обратно в foo.exe, а затем вызвать foo.exeвиртуальные функции указанных классов.


Это решение будет кросс-платформенным, но у вас будут серьезные проблемы с тем, чтобы не нарушать abi между разделяемой библиотекой и exe.Даже самые простые изменения могут легко сломать аби.

Это хорошее введение в то, что может сломать аби.

1 голос
/ 24 декабря 2011

Обычно, когда я разрабатываю плагин, я обычно предоставляю интерфейс, на который может положиться создатель плагина.

И через этот интерфейс плагин может иметь доступ к объектам и классам, которыеЯ разрешаю ему видеть и взаимодействовать.

...