Компьютерный форум OSzone.net  

Компьютерный форум OSzone.net (http://forum.oszone.net/index.php)
-   Программирование и базы данных (http://forum.oszone.net/forumdisplay.php?f=21)
-   -   Использование общих классов в программе и dll (http://forum.oszone.net/showthread.php?t=240599)

crashtuak 14-08-2012 19:16 1970250

Использование общих классов в программе и dll
 
Ситуация: имеется набор классов, которые должны использоваться и в программе, и в dll (плагины). Я так понимаю, тот набор классов должен быть оформлен в отдельную dll? Или можно как нибуть сделать, что бы ихняя реализация содержалась в программе (сделать, что бы в нашем ехе файлы были экспортируемые классы, функции и тд и тп)?

ferget 14-08-2012 21:02 1970313

Не понятно. Опишите подробнее, что вы хотите сделать

crashtuak 15-08-2012 13:14 1970634

Я конкретно ничего не хочу сделать, просто академический интерес :). Но для примера:
есть код класса 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 1970659

crashtuak, по хорошему, конечно, лучше весь дублирующийся код выносить в библиотеки dll, тогда и отладка будет проще, и не надо будет компилировать по новой основную программу, добавив 1 строку кода.
Можно и интерфейсом, но смысла в этом не больше, чем классом "внутри" программы. Все равно в итоге придется пересобирать весь проект.

pva 28-08-2012 21:48 1978790

crashtuak, самый простой способ реализации - callback. Можно передать в dll указатели на функции-конструкторы классов, возвращающие указатели на виртуальные интерфейсы


Время: 17:14.

Время: 17:14.
© OSzone.net 2001-