Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2008.08.17;
Скачать: CL | DM;

Вниз

Вынести в dll класс   Найти похожие ветки 

 
Виктор007 ©   (2008-07-10 23:20) [0]

Здравствуйте. Подскажите как можно в dll вынести класс, чтобы потом можно было использовать его как из приложения?
У меня такое описание класса

TFinishEvent = procedure(Sender: TObject) of object;
 TStatusChangeEvent = procedure(Sender: TObject; code: integer; mess: string) of object;
 THTMLCompiler = class(TObject)
   private
     FOnFinish: TFinishEvent;
     FOnStatusChange: TStatusChangeEvent;
     FBookProjFile: string;
   public
     Constructor Create;
     Destructor Destroy; override;
     procedure StartCompile;
     property OnFinish: TFinishEvent read FOnFinish write FOnFinish;
     property OnStatusChange: TStatusChangeEvent read
       FOnStatusChange write FOnStatusChange;
     property BookProjFile: string read FBookProjFile write FBookProjFile;
 end;


 
Loginov Dmitry ©   (2008-07-11 00:12) [1]

> Подскажите как можно в dll вынести класс, чтобы потом можно
> было использовать его как из приложения?
> У меня такое описание класса


Как этот класс предполагается использовать в дальнейшем? Будут ли использоваться в ЕХЕ объекты, созданные в DLL и наоборот?

Если ДА, то (имхо) следует вынести класс в пакет bpl, тогда один и тот же экземпляр класса и экземпляры можно использовать и в ЕХЕ и в DLL.


 
Виктор007 ©   (2008-07-11 00:40) [2]


> Как этот класс предполагается использовать в дальнейшем?
>  Будут ли использоваться в ЕХЕ объекты, созданные в DLL
> и наоборот?


В дальнейшем планируется создавать и использовать экземпляр класса из exe файла таким образом:

var
 HTMLCompiler: THTMLCompiler;
...
 HTMLCompiler := THTMLCompiler.Create;
 HTMLCompiler.BookProjFile := OpennedProject.fProjectPath;
 HTMLCompiler.OnFinish := HTMLCompilerFinish;
 HTMLCompiler.OnStatusChange := HTMLStatusChange;
 HTMLCompiler.StartCompile;
 HTMLCompiler.Free;


 
Ega23 ©   (2008-07-11 00:49) [3]


> Виктор007 ©   (11.07.08 00:40) [2]


Прошу прощения: а зачем его в отдельную dll выносить? Чисто "семантически" (мол, отдельный кусок)? Ну вынеси его в отдельный юнит, и прилинкуй его... Избавишься от массы проблем.


 
Виктор007 ©   (2008-07-11 01:15) [4]

Сейчас так и делаю, но дело в том что данный юнит используют два приложения (консольная и обычная версия приложения). Чтобы не дублировать код в обоих exe файлах хочется вынести все в dll. Конечно, в данном случае это не критично,  но меня подогревает интерес, как же все-таки так делается.


 
Тын-Дын ©   (2008-07-11 01:19) [5]


> Виктор007 ©   (10.07.08 23:20)  


Для использования твоего класса определи в DLL функции, которые будут вызывать методы созданного экземпляра класса.

Например:

type

  TMyClass=class
  private
    FValue: Integer;
  public
    constructor Create;
    function GetValue: Integer;
    procedure SetValue(Value: Integer);
  end;

implementation
{ TMyClass }

constructor TMyClass.Create;
begin
 FValue := 1;
end;

function TMyClass.GetValue: Integer;
begin
 Result := FValue;
end;

procedure TMyClass.SetValue(Value: Integer);
begin
 FValue := Value;
end;

function GetObj: TMyClass;
begin
 Result := TMyClass.Create;
end;

function GetValue(Obj: TMyClass): Integer;
begin
 Result := Obj.GetValue;
end;

procedure SetValue(Obj: TMyClass; Value: Integer);
begin
 Obj.SetValue(Value);
end;

procedure FreeObj(Obj: TMyClass);
begin
 if Assigned(Obj) then Obj.Free;
end;

exports
 GetObj,
 GetValue,
 SetValue,
 FreeObj;
end.


 
Тын-Дын ©   (2008-07-11 01:19) [6]


> Виктор007 ©   (11.07.08 01:15) [4]
>
> Сейчас так и делаю, но дело в том что данный юнит используют
> два приложения (консольная и обычная версия приложения).
>  Чтобы не дублировать код в обоих exe файлах хочется вынести
> все в dll. Конечно, в данном случае это не критично,  но
> меня подогревает интерес, как же все-таки так делается.


Это делается при помощи пакетов.


 
Виктор007 ©   (2008-07-11 01:33) [7]


> Это делается при помощи пакетов.


Спасибо за пример. А что за пакеты имеются ввиду, как они называются, чтобы в поиске можно было найти о работе с ними?


 
Тын-Дын ©   (2008-07-11 01:42) [8]

File-New-Other-New-Package


 
Loginov Dmitry ©   (2008-07-11 07:46) [9]

> Чтобы не дублировать код в обоих exe файлах хочется вынести
> все в dll.


Гемора хочется? (как еще объяснить желание делать простейшие вещи сложным способом?)


 
Поросенок Винни-Пух ©   (2008-07-11 10:01) [10]

> Чтобы не дублировать код в обоих exe файлах хочется вынести
> все в dll.


Остается только догадаться как же ты планировал юзать класс в exe не помещая в юзесы exe модуль класса.

А если помещал, то нафик тебе твоя длл, если класс прикомпилирован к exe?


 
Виктор007 ©   (2008-07-11 10:30) [11]


> Остается только догадаться как же ты планировал юзать класс
> в exe не помещая в юзесы exe модуль класса.


Я думал использовать что-то вроде COM, тогда реализация класса будет хранится в dll, а к проекту будет цепляться tlb файл с описанием класса..


 
Ляпа   (2008-07-11 10:33) [12]

http://www.delphikingdom.com/asp/viewitem.asp?catalogid=274


 
Ляпа   (2008-07-11 10:36) [13]

http://www.podgoretsky.com/ftp/Docs/Delphi/Tenser/2/index1.htm



Страницы: 1 вся ветка

Текущий архив: 2008.08.17;
Скачать: CL | DM;

Наверх




Память: 0.5 MB
Время: 0.018 c
2-1215790986
DillerXX
2008-07-11 19:43
2008.08.17
Помогите с SQL запросом если не лень


2-1215759810
TUserClass
2008-07-11 11:03
2008.08.17
"Полосатый" DBGrid и несколько выделенных записей ...


15-1214562797
Dmitry S
2008-06-27 14:33
2008.08.17
Изменение размеров изображения на C под FreeBSD?


2-1215774255
QQQ1
2008-07-11 15:04
2008.08.17
Format + TDateTime


15-1213957352
AlexDan
2008-06-20 14:22
2008.08.17
Полетел принтер..