Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Основная";
Текущий архив: 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
1-8918
Baron
2002-01-17 11:33
2002.02.04
Как добавить свойство Flat к компанентам?


1-8938
DJ X
2002-01-18 07:48
2002.02.04
3 вопроса


4-9038
Artis
2001-12-09 13:24
2002.02.04
Как узнать размер файла?


1-8816
ev
2002-01-19 17:11
2002.02.04
Sender


1-8851
Dennis S
2002-01-16 11:42
2002.02.04
Событие на Мышь





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