Форум: "Начинающим";
Текущий архив: 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.041 c