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

Вниз

Как поместить класс в 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;
Скачать: [xml.tar.bz2];

Наверх





Память: 0.49 MB
Время: 0.009 c
4-1139505659
EarlVadim
2006-02-09 20:20
2006.05.07
Консоль (через CreateProcess) не может достучаться в Интернет


3-1142487231
alex_pv2
2006-03-16 08:33
2006.05.07
ИМПОРТ В ACCESS


3-1142497390
SLP
2006-03-16 11:23
2006.05.07
Как определить в активном экземпляре Excel кол-во страниц?


2-1145516103
Zaq123
2006-04-20 10:55
2006.05.07
Проблема с записью в файл.


6-1137430009
GanibalLector
2006-01-16 19:46
2006.05.07
Номер порта(Addr.sin_port)





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
Английский Французский Немецкий Итальянский Португальский Русский Испанский