Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > C/C++: Общие вопросы > Указатель на функцию


Автор: Artemon 3.6.2009, 07:34
Пишу программу с поддержкой плагинов (exe + Dll's)

Как сделать следующее:

В exe у меня есть основной класс, который является главным классом всего приложения.
Возможноли в dll передать указатель на этот класс, но при этом, чтобы в dll не содержалось самой реализации этого класса.

Автор: Earnest 3.6.2009, 07:39
Да чего нельзя-то. Только все public-функции класса нужно будет экспортировать, чтобы они были доступны в DLL. И, конечно, хедер класса нужно подключать к DLL, чтобы компилятор видел его структуру.

С точки зрения плагинов, правильнее определить класс-интерфейс (с чистыми виртуальными функциями), а в DLL сделать реализацию это интерфейса. После этого потребуется только экспорт функции-фабрики, которая будет возвращать указатель на интерфейс.


Автор: Artemon 3.6.2009, 09:28
Цитата

Да чего нельзя-то. Только все public-функции класса нужно будет экспортировать, чтобы они были доступны в DLL. И, конечно, хедер класса нужно подключать к DLL, чтобы компилятор видел его структуру.


Не понял, каким образом можно экспортировать  методы из exe ?

Цитата

С точки зрения плагинов, правильнее определить класс-интерфейс (с чистыми виртуальными функциями), а в DLL сделать реализацию это интерфейса. После этого потребуется только экспорт функции-фабрики, которая будет возвращать указатель на интерфейс.


Я наоброт не хочу реализацию делать в DLL, т.к. она уже сть в exe и должна вызываться оттуда.
Грубо говоря в exe движок, а dll вызывает методы этого движка.

Автор: mes 3.6.2009, 09:48
Цитата(Artemon @  3.6.2009,  08:28 Найти цитируемый пост)
Я наоброт не хочу реализацию делать в DLL, т.к. она уже сть в exe и должна вызываться оттуда.

В принципе разнице нет, где находится реализация в ехе или cpp. Суть в этих частях цитаты :
Цитата(Earnest @  3.6.2009,  06:39 Найти цитируемый пост)
правильнее определить класс-интерфейс (с чистыми виртуальными функциями)

Цитата(Earnest @  3.6.2009,  06:39 Найти цитируемый пост)
После этого потребуется только экспорт функции  , которая будет возвращать указатель на интерфейс.

или принимать этот указатель.

Автор: Alek86 3.6.2009, 10:18
если попроще, то в DLL должна быть экспортирована функция, что принимает указатель на интерфейс IMain и с ним работает, как тебе нужно
а EXE загружает DLL и вызывает эту функцию, передавая ей указатель на свой класс - реализацию IMain

Автор: Artemon 3.6.2009, 11:29
Всем спасибо, решил проблему, добавив абстрактный класс, у казатель на который передается в DLL.

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)