Форум: "Основная";
Поиск по всему сайту: delphimaster.net;
Текущий архив: 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 либо ехать с компашкой....




Форум: "Основная";
Поиск по всему сайту: delphimaster.net;
Текущий архив: 2002.02.04;
Скачать: [xml.tar.bz2];




Наверх





Память: 0.75 MB
Время: 0.017 c
4-9029            irq                   2001-12-04 17:49  2002.02.04  
Процессы


7-9014            perov                 2001-10-24 16:18  2002.02.04  
Убить процесс


3-8766            Designer              2002-01-06 12:56  2002.02.04  
Можно ли как-нибудь отсортированные данныепотом редактировать в гриде?


1-8930            yaJohn                2002-01-17 11:50  2002.02.04  
Gde vziat self??? Vopros skoree po Object Pascal.


6-8966            Dup                   2001-11-12 10:37  2002.02.04  
IP юзера