Текущий архив: 2003.04.03;
Скачать: CL | DM;
ВнизСпособы вызова Dll Найти похожие ветки
← →
msoftware (2003-03-24 06:03) [0]Здравствуйте Мастера! Я знаю 2 способа вызова dll, но во всех моих способах эти библиотеки показываются в панели задач. Как сделать чтобы этого небыло???
← →
MPS87 (2003-03-24 06:40) [1]Неужели никто не знает???
← →
Думкин (2003-03-24 07:51) [2]
> msoftware © (24.03.03 06:03)
Покажи как делаешь.
← →
PGM (2003-03-24 08:51) [3]Если используешь VCL с формами в DLL то передавай туда Application и создавай формы с помошью переданного Application, а не через Application в DLL.
← →
Внук (2003-03-24 09:41) [4]Ой... А в Help заглянуть?
When writing a DLL that uses VCL forms, assign the window handle of the host EXE’s main window to the DLL’s Application.Handle property. This makes the DLL’s form part of the host application. Never assign to the Handle property in an EXE.
← →
msoftware (2003-03-24 13:22) [5]Показываю как делаю:
ниже код Unit"a самой библиотеки:
library wzrdll;
uses
SysUtils,
Classes,
uStep1 in "uStep1.pas" {fStep1},
uStep3 in "uStep3.pas" {fStep2},
uStep2 in "uStep2.pas" {fStep3},
uStep4 in "uStep4.pas" {fStep4};
{$R *.res}
exports
ShowWizard name "showWizard";
begin
end.
Далее, на форме в библиотеке:
...
var
fStep1: TfStep1;
procedure ShowWizard(AOwner: TComponent);
implementation
uses uStep3, uStep2, uStep4;
{$R *.dfm}
procedure ShowWizard(AOwner: TComponent);
begin
fstep1:=TFstep1.Create(AOwner);
fstep2:=TFstep2.Create(AOwner);
fstep3:=TFstep3.Create(AOwner);
fstep4:=TFstep4.Create(AOwner);
fStep1.Show;
end;
...
А ниже уже как вызываю библиотеку:
type TShowWizard=procedure(AOwner: TComponent);
var WzrdLib: THandle;
ShowWizard: TShowWizard;
begin
WzrdLIb:=LoadLibrary("wzrdll.dll");
if WzrdLib<32 then showMessage("Библиотека wzrdll.dll не найдена")
else begin
ShowWizard:=TShowWizard(GetProcAddress(WzrdLib,"showWizard"));
ShowWizard(Application);
← →
oomneeq (2003-03-24 13:47) [6]Ну если не хочешь хелп читать, и в ShowWizard будешь всегда Aopplication передавать, то вставь одну строчку вот так:
procedure ShowWizard(AOwner: TComponent);
begin
Application.Handle:=TApplication(AOwner).Handle
fstep1:=TFstep1.Create(AOwner);
fstep2:=TFstep2.Create(AOwner);
fstep3:=TFstep3.Create(AOwner);
fstep4:=TFstep4.Create(AOwner);
fStep1.Show;
end;
← →
passm (2003-03-24 13:49) [7]library ...
...
uses
...
forms,
...
function GetLibAppHandle: HWND; stdcall;
begin
Result:= Application.Handle
end;
procedure SetLibAppHandle(const Handle: HWND); stdcall;
begin
Application.Handle:= Handle
end;
exports
...
GetLibAppHandle,
SetLibAppHandle,
...;
При загрузки DLL запоминай GetLibAppHandle и передавай Handle от приложения SetLibAppHandle(Application.Handle). Перед выгрузкой DLL восстанавливай Application.Handle у DLL.
← →
Mystic (2003-03-24 14:06) [8]> msoftware ©
А почему не пакеты?
← →
PGM (2003-03-24 14:40) [9]Если бы передавал как советовали TApplication, а не TComponent и создавал формы через Application.CreateForm не было бы никаких проблем.
← →
msoftware (2003-03-24 14:57) [10]< passm © (24.03.03 13:49)
Честно говоря нифига, все равно как отдельное приложение показывает. Может быть проблема в том что я запускаю dll из другой dll которая запускается приложением???
← →
passm (2003-03-24 15:06) [11]msoftware © (24.03.03 14:57)> Наверняка... Попробуй передать Handle: Application -> DLL -> DLL
← →
msoftware (2003-03-24 17:29) [12]> passm © (24.03.03 13:49)
O zdorovo! rabotaet,dashe bez gethandle oboslos spasibo vot tolko klaviatura russkie bukvi ne rabotayut stalo, pochemu?????
← →
msoftware (2003-03-24 17:43) [13]pochemu ruskie bukvi ne rabotaut nepoimu?
Страницы: 1 вся ветка
Текущий архив: 2003.04.03;
Скачать: CL | DM;
Память: 0.47 MB
Время: 0.007 c