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

Вниз

Как поместить класс в Dll или пакет?   Найти похожие ветки 

 
Kolan ©   (2006-03-26 13:54) [0]

Здравствуйте,
 Например есть у меня класс:
 TMyClass = class
 public
   function Foo: Integer;
 end;


Я хочу использовать его во многих своих приложения.
Вариант 1.
Просто добавить Pas файл в проект, создать экземпляр (MyClass) и писать...

Хотелось бы не включать его в проект а убрать в отдельный файл.

Вариант 2.
Можно использовать Dll(Не пробовал может тоже не получистя)
Тогда я в Dll создам экземпляр и сделаю интерфейс к нему.

Например
function Foo: Integer;
begin
 Result := MyClass.Foo  ;
end;


Как правильнее это сделать?
А как с пакетами? Ну созунил я файл с классом в Contains пакета, скомпилировал, получил *.dpk...

Что дальше?


 
Cash ©   (2006-03-26 21:21) [1]

А где суть вопроса?
Имеешь ввиду, использовать неопределенное количество классов или их
потомков в своей проге?


 
Kolan ©   (2006-03-26 22:46) [2]

Нет.
 Вот есть у меня класс

TMyClass = class
public
  function Foo: Integer;
end;

с реализованой функцией Foo

Хотелось бы раз и навсегда скомпилировать этот класс, а потом подключать к проектам.

А где суть вопроса?
Суть вопроса - как это сделать...

Если я сделаю как в Варианте1, то при компиляции он будет каждый раз компилирроваться(Если вообще скомпилируется)...

Имеешь ввиду, использовать неопределенное количество классов или их
потомков в своей проге?

Нет мне нужен только один экземпляр. И без потомков. Просто интерфйс к  нему. Блин незнаю как сказать...


 
Lamer@fools.ua ©   (2006-03-27 09:37) [3]

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


 
Cash ©   (2006-03-27 09:58) [4]

Kolan ©   (26.03.06 22:46) [2]:
Во! Сам ответил на свой вопрос! >> ... Просто интерфйс к  нему ... :)
Сделай COM, или не COM, но, Interface, а методы к нему имплементируй
в своей DLL-ке!

Не нравится???

Хорошо!
В Dll-ку имплементируешь весь класс, но только этот класс должен быть
наследником от какого нибудь известного проге класса.
А для создания экземпляра этого длльного класса используй
функцию, которая возвращает уже готовый указатель на экземпляр.

Мутарно???

Ну... ладно!
Опять, берешь свой (за)конченный класс :))), и кладешь его в Dll-ку,
а по begin-у в Dll-ке говоришь RegisterClassEx с этим своим классом,
вроде так у меня прокатывало, а потом достаточно найти сам класс по
его строковому названию и вызывать конструктор.
... Да, только надо ShareMem использовать и в проекте, и в Dll-ке,
а при этом придется borlandmm.Dll пихать в свой проект.

Фу-у-у-у-у... вроде все рассказал. :)
Вроде ничё не соврал. :)))


 
Kolan ©   (2006-03-27 22:17) [5]

Kolan ©   (26.03.06 22:46) [2]:
Во! Сам ответил на свой вопрос! >> ... Просто интерфйс к  нему ... :)
Сделай COM, или не COM, но, Interface, а методы к нему имплементируй
в своей DLL-ке!

Вот этот вариант нравится больше всего. Надо разобраться, благодарю за помощь :)


 
TUser ©   (2006-03-28 08:18) [6]

Используй bpl.


 
Kolan ©   (2006-03-28 19:47) [7]

TUser ©   (28.03.06 08:18) [6]
Есть! :)

Lamer@fools.ua ©   (27.03.06 09:37) [3]

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

Шас дочитаю. Постараюсь понять.... :)


 
Kolan ©   (2006-03-28 20:23) [8]

Еще раз вопрос для тупых...

Вот в этом примере:
http://www.delphikingdom.com/asp/viewitem.asp?catalogid=274

1. Я получил 3 модуля
UPlainFileExporter, UExporter, UClassManager.

Что теперь с ними делать? Я так понял, что чтобы использовать плагины достаточно иметь bpl файл. А как его получить?

2. GetClassManager.Add(TPlainFileExporter);
А вот это как понять. Что я добавляю в список?


 
Kolan ©   (2006-03-28 21:18) [9]

Вроде с 1. из [8] разобрался. Не понял только почему у автора статьи в программе есть:

uses
 UClassManager, UExporter, UPlainFileExporter;
Если это плагин. Он там не нужен как я понял....?

Остал ся теперь вопрос 2...


 
GanibalLector ©   (2006-03-29 01:27) [10]

Вот еще очень занятное чтиво : http://forum.tvercity.ru/index.php?showtopic=1345

Рекомендую ;)


 
Kolan ©   (2006-03-29 14:04) [11]

Блин, ничего не понимаю...

Удалил я из проекта, который загружает плагины, модуль UPlainFileExporter. Так и должно быть как я понимаю. Ведь программа ничего о конкретных плагинах плагинах не знает.

Теперь естественно этот код не выполняется:
initialization
 GetClassManager.Add(TPlainFileExporter);
finalization
 GEtClassManager.Remove(TPlainFileExporter);


Так и должно быть, ведь это в плагине...

Загружаю плагин
procedure TForm1.BitBtn1Click(Sender: TObject);
begin
 PluginModule := LoadPackage(ExtractFilePath(ParamStr(0))
   + "KPlugin.bpl");
 RefreshPluginList;
end;


Ну и теперь естественно ничего нет в списке плагинов...

procedure TForm1.RefreshPluginList;
var
 i : Integer;
begin
 PluginsBox.Items.Clear;
 for i := 0 to GetClassManager.Count - 1 do
   PluginsBox.Items.Add(TExporterClass(GetClassManager[i]).ExporterName);
end;


Объясните как это работает.. Нифига не понимаю..
И что значит
Add(TPlainFileExporter);

?


 
Cash ©   (2006-03-29 15:04) [12]

Kolan ©   (29.03.06 14:04) [11]:
Уф-ф-ф-ф,... чес-слово, именно по этому не люблю чужие издания на
эиту тему! :)))


 
Kolan ©   (2006-03-29 15:24) [13]

Наверно я неправильно группу создал... Сечас скомпилил пример. Там 2 плагина.

Один вообще подключен в uses, а второй нет.
И у второго в секцию инициализации заходишь только при его загрузки.
А у первого при старте приложения.

Но что конкретно я не так сделал пока мне не понятно.


 
Kolan ©   (2006-03-29 16:05) [14]

Приблизительно понял как работает пример...

Так что если использовать пакеты и в каждом подключить модуль вида:
Цитата из статьи

{ ============================================= }
unit UClassManager;
{ ============================================= }
{ ============================================= }
interface
{ ============================================= }
uses
 Classes;
type
 TClassManager = class(TList);
function ClassManager: TClassManager;

{ ============================================= }
implementation
{ ============================================= }
var
 Manager: TClassManager;

function ClassManager: TClassManager;
begin
 Result := Manager;
end;

{ ============================================= }
initialization
{ ============================================= }
Manager := TClassManager.Create;

{ ============================================= }
finalization
{ ============================================= }
Manager.Free;

end{ ========================================== }.


Объект Manager будет на всех один? И в каждом пакете саой создан не будет?


 
Reindeer Moss Eater ©   (2006-03-29 16:20) [15]

Один на процесс


 
Kolan ©   (2006-03-29 16:22) [16]

Один на процесс
Благодарю за разяснения.



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

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

Наверх




Память: 0.51 MB
Время: 0.038 c
15-1144858156
Yeg
2006-04-12 20:09
2006.05.07
Отправка SMS


11-1125107988
ebta
2005-08-27 05:59
2006.05.07
bzip for KOL ?


15-1144912159
0bsid
2006-04-13 11:09
2006.05.07
глюки....


15-1144903122
BorisMor
2006-04-13 08:38
2006.05.07
Работа в Новосибирске


1-1143645993
Игорь Степанов
2006-03-29 19:26
2006.05.07
Перевод рисунка из формата metafile в формат bitmap