Показать полную графическую версию : Использование общих классов в программе и dll
crashtuak
14-08-2012, 19:16
Ситуация: имеется набор классов, которые должны использоваться и в программе, и в dll (плагины). Я так понимаю, тот набор классов должен быть оформлен в отдельную dll? Или можно как нибуть сделать, что бы ихняя реализация содержалась в программе (сделать, что бы в нашем ехе файлы были экспортируемые классы, функции и тд и тп)?
Не понятно. Опишите подробнее, что вы хотите сделать
crashtuak
15-08-2012, 13:14
Я конкретно ничего не хочу сделать, просто академический интерес :). Но для примера:
есть код класса Point:
class Point {
public:
double x,y;
Point(double xx, double yy)
{
x = xx; y = yy;
}
bool equal(Point* p){
if(this->x == p->x && this ->y==p->y)
return true;
return false;
}
}
Данный класс должен использоватся и в программе, и в dll. Вот думаю, можно оформить все подобные классы в отдельную dll, и импортировать их оттуда... Можно сделать интерфейс Point(чисто виртуальные функции), и использовать интерфейс в работе, а не конкретную реализацию(VTABLE решит, где и как дергнуть нашу реализацию). Но мне интересно, можно ли как нибуть сделать, что бы класс был без виртуальных методов, но и что бы реализация методов была только в иполняемом файле(а то можно включить реализацию и в исполняшку, и в dll, но таким образом выходит дублирование кода, не хорошо однако)?
Delirium
15-08-2012, 14:05
crashtuak, по хорошему, конечно, лучше весь дублирующийся код выносить в библиотеки dll, тогда и отладка будет проще, и не надо будет компилировать по новой основную программу, добавив 1 строку кода.
Можно и интерфейсом, но смысла в этом не больше, чем классом "внутри" программы. Все равно в итоге придется пересобирать весь проект.
crashtuak, самый простой способ реализации - callback. Можно передать в dll указатели на функции-конструкторы классов, возвращающие указатели на виртуальные интерфейсы
© OSzone.net 2001-2012
vBulletin v3.6.4, Copyright ©2000-2025, Jelsoft Enterprises Ltd.