Форум: "Основная";
Текущий архив: 2002.02.04;
Скачать: [xml.tar.bz2];
ВнизПомогите плиз Найти похожие ветки
← →
Mr.Fox (2002-01-09 13:27) [0]Скажите пожалуйста, как запихнуть в dll"ку форму и вызвать обработчик события из своей проги.
Заранее благодарен
← →
Fellomena (2002-01-09 13:31) [1]New-> DLL,
затем New-> Form, на форме размещаешь всё что пожелаешь
library ModelF;
uses
Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
StdCtrls,
Unit1 in "Unit1.pas" {Form1};
function ShowMyDialog(Msg: PChar): Boolean; stdcall;
begin
{Создаем экземпляр Form1 формы TForm1}
Form1 := TForm1.Create(Application);
{В Label1 выводим сообщение Msg}
Form1.Label1.Caption := StrPas(Msg);
{Возвращаем True если нажата OK (ModalResult = mrOk)}
Result := (Form1.ShowModal = mrOk);
Form1.Free;
end;
exports ShowMyDialog;
begin
end.
Ну а из главного :
...
implementation
function ShowMyDialog(Msg: PChar): Boolean; stdcall; external "project1.dll";
...
procedure TForm1.Button1Click(Sender: TObject);
begin
if ShowMyDialog(PChar("Work !!!"))= TRUE then
ShowMessage("TRUE !")
ELSE
ShowMessage("FALSE !");
end;
← →
Wetnose (2002-01-09 13:38) [2]Забуть DLL, когда есть Delphi!
BPL - рулит... - это специальная разновидность DLL, которая cоздана специально для Delphi!
Работать с BPL также просто, как с простым модулем.
Тем более, что в DLL код VCL будет просто напросто дублироваться.
Откажись от одинокого exe-шника: пусть вместе с ним будет пара другая bpl-ок. Зато работать будет гораздо проще.
Есть недостаток: все юзаемые bpl-ки будут грузится в память. Но проблемма памяти, при размерах библиотек в несколько мегабайт, imho, не актуальна.
← →
Fellomena (2002-01-09 13:55) [3]2 Wetnose:
проблема памяти неактуальна говоришь ? хех, "инетресны мне ваши слова, папаша"
Если программа использует много модальных форм, разных ресурсов, картинок и т.д. и всё это будет загружаться в память - это какой-то кошмар получится !
И просвети plz меня, с bpl другие проги совместимы ?
Всмысле dll могут использовать программы написанные на других языках (когда я на Builder-е что-то делаю мне иногда приходится некоторые свои здоровые ф-ии и процедуры, которые я в Delphi делала, в dll загонять, специально для того, что бы их на C-ый синтаксис не переписывать, а использовать "напрямую")
Будет моя bpl-ка работать с прогой на Builder-e написанной работать ?
← →
Vovchik (2002-01-09 14:16) [4]А вот кстати, формат bpl может (скорее всего) одинаковый. Ведь VCL не зависит от Delphi/C++ Builder.
Только DLL, всё же лучше, это правда.
← →
Fellomena (2002-01-09 14:23) [5]VCL то одинаковая, но соглашения о вызовах используемые при создании dll могут быть разные: Builder - cdecl ; Delphi (да и сам API 8) - stdcall;
Я просто с принципами работы bpl не знакома, поэтому и спрашиваю.
← →
Vovchik (2002-01-09 14:27) [6]Вызовы то разные, но возможно при использовании bpl используется соглашение register, как для процедур объектов (или только секции published, не помню точно).
В конце концов, bpl построенный Дельфями цепляется к С++ Builder. Значит это как-то решено.
← →
Fellomena (2002-01-09 14:31) [7]2 Vovchik:
наверное это так...
но я не могу понять, зачем так извращаться-то ?
Кто мне преймущества bpl по сравнению с dll скажет ?
Надо глянуть сегодня, что по этому поводу DelphiHelp говорит...
← →
Виктор Щербаков (2002-01-09 14:39) [8]Кто мне преймущества bpl по сравнению с dll скажет?
Wetnose уже сказал:
Работать с BPL также просто, как с простым модулем.
← →
Vovchik (2002-01-09 14:47) [9]Ну, люди всякие бывают. Я-то обеими руками за DLL!!!
>>>Виктор Щербаков © (09.01.02 14:39)
А с длл что, сложно что-ли?
← →
Wetnose (2002-01-09 15:14) [10]Если в DLL делать форму, то весь необходимый код из vcl подцепится к ней подцепится. Он же подцепится и к exe-шнику. Получится, что один и тот же код присутствует в двух экземплярах. Зачем?
Естественно, использовать bpl с другими языками (кроме CBuilder) нерационально. Однако для Delphi, imho, это идеальный вариант.
← →
Vovchik (2002-01-09 15:21) [11]Может я не в курсе, но как код из ДЛЛ подцепится к ехе-шнику? Мне казалось всегда, что при загрузке ДЛЛ, её код загружается в адресное пространство процесса, который ДЛЛ грузит. Откуда возьмётся дублирование? Можно поподробнее.
← →
valery_f (2002-01-09 15:22) [12]DLL и BPL - несколько разные вещи. BPL - это хранилище компонент, которые могут быть доступны нескольким приложениям (и DLL тоже).
Скажем, если есть пакет EXE-шников + DLL-ли с формами - один и тот же код (компоненты и стандартные юниты) будет линковаться ко всем ним - расход памяти (и ОЗУ, и на диске) может возрасти в N-сколько раз. Run-time BPL для этого и придуманы - экономия по размеру пакета программ (общие компоненты только в одном экземпляре - в BPL) и используемой памяти (если работают несколько одновременно). На одном же EXE, соответственно, выигрыша не будет.
← →
Vovchik (2002-01-09 15:38) [13]У ДЛЛ свои преимущества.
← →
Fellomena (2002-01-10 10:50) [14]ok - вчера почитала у Тейксейры про bpl-ы и pakages...
С одной стороны bpl вещь действительно удобная - экономия места и т.д., но с другой стороны, как правильно сказал valery_f, использование bpl для одного exe-шника не имеет смысла.
← →
GS (2002-01-16 10:52) [15]Я однажды уже связался с этими bpl, теперь никак отвязаться не могу. В своё время на Delphi 4.2 сделали один exe и кучу dll к нему, причём работало всё через bpl и вроде всё было круто.
Зато сейчас, с D6 нет никакой возможности всё перекомпилить на нём - и всё из-за bpl (в d4 и в d6 они РАЗНЫЕ, была даже носовместимость у D4.1 и D4.2!!!). По весу они большие, по инету переслать проблема. По стране ездить тоже проблема, так что получилась безвыходная ситуация... И приходится всё менять либо на d4 либо ехать с компашкой....
Страницы: 1 вся ветка
Форум: "Основная";
Текущий архив: 2002.02.04;
Скачать: [xml.tar.bz2];
Память: 0.48 MB
Время: 0.005 c