Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Начинающим";
Текущий архив: 2008.08.17;
Скачать: [xml.tar.bz2];

Вниз

Вынести в 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;
Скачать: [xml.tar.bz2];

Наверх





Память: 0.48 MB
Время: 0.051 c
2-1215802076
Jimmy
2008-07-11 22:47
2008.08.17
ScrollBar


2-1215772186
Виктор
2008-07-11 14:29
2008.08.17
Как разархивировать файл?


2-1216112761
Newss
2008-07-15 13:06
2008.08.17
Создание таблицы в word


4-1194839861
Potato
2007-11-12 06:57
2008.08.17
Настройка тарелки на спутник, измерение сигнала качества


2-1215953221
Sick
2008-07-13 16:47
2008.08.17
Как изменить заголовок окна?





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский