![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Модульность программы [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.