Релизация dll
От: Gorn  
Дата: 15.07.04 11:59
Оценка:
Возможно ли собрать dll, использующей класс, не раскрывая ей реализации этого класса?

19.07.04 18:04: Перенесено модератором из 'C/C++'. Андрей Тарасевич (30) в Прочее — Павел Кузнецов
Re: Релизация dll
От: Denwer Россия  
Дата: 15.07.04 12:09
Оценка:
Здравствуйте, Gorn, Вы писали:

G>Возможно ли собрать dll, использующей класс, не раскрывая ей реализации этого класса?


Можно
1) Засунуть в другую DLL
2) Откомпилить в OBJ и присоеденить к проекту
Re: Релизация dll
От: Программер  
Дата: 15.07.04 12:30
Оценка:
Здравствуйте, Gorn, Вы писали:

G>Возможно ли собрать dll, использующей класс, не раскрывая ей реализации этого класса?


Смотри Static Library (.lib). Нужен будет только хеадер и собственно lib — файл. Правда этот прием не пройдет, если класс абстрактный.
Re: Релизация dll
От: Ovl Россия  
Дата: 15.07.04 12:38
Оценка:
Здравствуйте, Gorn, Вы писали:

G>Возможно ли собрать dll, использующей класс, не раскрывая ей реализации этого класса?


выше есть советы.

у меня паралельный вопрос — архитектурно правильно будет реализовать в dll функции, имеющие параметром интерфейсы (указатели на класс)? тогда все скомпилится, и функция сможет использовать классы, если хедеры иметь. но правильно ли это будет с точки зрения построения программы?
Read or Die!
Как правильно задавать вопросы
Как правильно оформить свой вопрос
Автор: anvaka
Дата: 15.05.06
Re[2]: Релизация dll
От: Sargash Россия  
Дата: 15.07.04 13:17
Оценка:
Здравствуйте, Ovl, Вы писали:

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


да вроде правильно, всегда так делаем
что-то типа:

== header ==
class Interface
{
public:
  virtual void release() = 0; 
  virtual void somefunc() = 0; 
};

extern Interface* CreateObject(); 

== exe side ==

void f()
{
  Interface *a=CreateObject(); // так создаёшь
  a->somefunc(); // так получаешь удовольствие
  a->release();  // так удаляешь
}
Перекуём баги на фичи!!!
Re[3]: Релизация dll
От: Ovl Россия  
Дата: 15.07.04 13:32
Оценка:
Здравствуйте, Sargash, Вы писали:

S>Здравствуйте, Ovl, Вы писали:


S>да вроде правильно, всегда так делаем

S>что-то типа:

о, я имел ввиду так (чито-то типа делегирования, и dll ничего не знает о реализации вроде как):

== inter.h ==

class Inter
{
public:
 virtual void somefunc() = 0; 
};

== dll.h ==
#include "inter.h"
class DllExport
{
  Inter* pInter;

public:
  DllExport(Inter* p) : pInter(p) {};

  void Func() {p->somefunc();};
}

== exe side ==
#include "inter.h"
class Supa : public Inter
{
 void somefunc(); 
};

void f()
{
  Supa pupa; // так создаёшь
  DllExport kin(&pupa);
  kin->Func(); // так получаешь удовольствие
}
Read or Die!
Как правильно задавать вопросы
Как правильно оформить свой вопрос
Автор: anvaka
Дата: 15.05.06
Re[4]: Релизация dll
От: rus blood Россия  
Дата: 15.07.04 13:36
Оценка:
Здравствуйте, Ovl, Вы писали:

Вполне корректно. В духе COM.
Имею скафандр — готов путешествовать!
Re: Релизация dll
От: Аноним  
Дата: 15.07.04 14:58
Оценка:
http://aegisknight.org/cppinterface.html
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.