Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

Модульность программы [D6, WinXP]


X-shadow ©   (2005-08-28 17:38:00) 

Хотел спросить как в длл затолкать целую форму а потом отобразить ее на форме которая вызвала длл. Еще хотел спросить как в этот длл затолкать картинку и потом ее достать оттуда.


X-shadow   (2005-08-29 09:03:00) [1]

Вот допустим у меня в длл есть форма. Я открываю все это через приложение. Как поместить экспортируемую форму на скажем панель приложения или на любой другой подобный контрол.


GuAV   (2005-08-29 03:58:00) [2]


>DLL может экспортировать только функции.
> надо тебе экспортировать картинку - пиши функцию
> которая возвращает картинку.


Не обязательно.

library ExportVariables;

uses Windows, SysUtils;

var
 I: Integer;
 kartinka: HBITMAP;

procedure MyDllDroc(Reason: Integer);
begin
 case Reason of
   DLL_PROCESS_ATTACH:
     begin
       I := 555;
       kartinka := LoadBitmap(0, PChar(OBM_CLOSE));
     end;
   DLL_PROCESS_DETACH:
     begin
       DeleteObject(kartinka);
     end;
 end;
end;

exports
 I,
 kartinka;

begin
 DllProc := MyDllDroc;
 DllProc(DLL_PROCESS_ATTACH);
end.




var h: THandle; P: Pointer;
....

 h := LoadLibrary('ExportVariables.dll');
 Win32Check(h <> 0);

 P := GetProcAddress(h, 'I');
 Win32Check(Assigned(P));
 Button1.Caption := IntToStr(PInteger(P)^);

 P := GetProcAddress(h, 'kartinka');
 Win32Check(Assigned(P));
 Image1.Picture.Bitmap.Handle := THandle(P^);


Defunct   (2005-08-29 02:46:00) [3]

> С длл я дело имел но экспортировал только функции.

DLL может экспортировать только функции.
надо тебе экспортировать картинку - пиши функцию которая возвращает картинку. Надо экспортировать форму - пиши функцию которая открывает форму.

> Lower_  
LibHandle := LoadLibrary('you.dll');
if Handle <> 0 then
begin
  ...


Наиль   (2005-08-28 21:47:00) [4]

Считай, что bpl - это борландовский Dll.
Создаётся через dpk-файл.
Для загрузки используешь LoadPackage вместо LoadLibrary.
В остальном всё тоже самое.


Lower_   (2005-08-28 21:30:00) [5]

library Express;
uses
 SysUtils,
 Classes,
 forms,
 Express_u in 'Express_u.pas' {exl_f};

{$R *.res}
procedure created;export;stdcall;
begin
try
exl_f:=Texl_f.Create(Application);
exl_f.ShowModal;
finally
exl_f.Free;
end;
end;
exports
created;
begin
end.

В главном модуле пишешь:
статично:
procedure created;stdcall; external 'you.dll' name 'created';
динамично -через адрессные пространства

Картинка подключается через ресурс (компилишь ресурс и вставляешь в свой модуль)

Затем из шлавного окна
LibHandle := LoadLibrary('you.dll');
if Handle <> 0 then
ResStream := TResourceStream.Create(LibHandle,
PChar('BITMAP1'), RT_BITMAP);
try
bit:=TBitmap.Create;
bit.LoadFromResourceName(LibHandle,PChar('BITMAP1'));
Image.Masked:=true;
Image.AddMasked(bit,clfuchsia);
bit.Free


X-shadow   (2005-08-28 18:35:00) [6]

а даже не знаю что это такое :). С длл я дело имел но экспортировал только функции.


TUser   (2005-08-28 18:01:00) [7]

> Хотел спросить как в длл затолкать целую форму а потом отобразить ее на форме которая вызвала длл.

Лучше использовать bpl.


Наверх

Титульная страница Поиск, карта сайта Написать письмо