Текущий архив: 2005.12.11;
Скачать: CL | DM;
ВнизЗапуск процедуры из DLL при клике Найти похожие ветки
← →
AntonXXX (2005-11-15 21:10) [0]var
b : TButton;
h : THandle;
proc : procedure;
...
procedure TForm1.FormShow(Sender: TObject);
begin
b := TButton.Create(Self);
b.Parent := Self;
b.Left := 10;
b.Top := 10;
b.Caption := "MyButton";
h := LoadLibrary("Test.dll");
proc := GetProcAddress(h, "DoBeep");
FreeLibrary(h);
end;
...
Как сделать, чтобы при клике на кнопку b выполнялась процедура DoBeep?
← →
TUser © (2005-11-15 21:20) [1]@proc:=getprocaddress
и дальше пишешь proc (параметры)
← →
begin...end © (2005-11-15 21:22) [2]> AntonXXX (15.11.05 21:10)
var
M: TMethod;
begin
M.Code := @proc;
M.Data := nil;
b.OnClick := TNotifyEvent(M);
...
end.
Если внутри процедуры предполагается использовать Sender (объект, вызвавший событие), то её следует описать как procedure(Self, Sender: TObject).
← →
Digitman © (2005-11-16 09:18) [3]
> begin...end © (15.11.05 21:22) [2]
> её следует описать как procedure(Self, Sender: TObject).
это неправильно.
Self-параметр передается неявно через регистр ebx, и к Sender"у он не имеет ни малейшего отношения
← →
Leonid Troyanovsky © (2005-11-16 09:29) [4]
> Digitman © (16.11.05 09:18) [3]
> Self-параметр передается неявно через регистр ebx, и к Sender"у
> он не имеет ни малейшего отношения
Under the register convention, Self behaves as if it were declared before all other parameters. It is therefore always passed in the EAX register.
--
Regards, LVT.
← →
Digitman © (2005-11-16 09:59) [5]
> Leonid Troyanovsky © (16.11.05 09:29) [4]
да, верно, именно через eax, а не через ebx
begin...end © (15.11.05 21:22) [2]
приношу извинения.
для экспортируемой/импортируемой регулярной процедуры форм.параметр Self действительно следует первым и явно.
← →
Amoeba © (2005-11-16 10:42) [6]
> procedure TForm1.FormShow(Sender: TObject);
> begin
> b := TButton.Create(Self);
> b.Parent := Self;
> b.Left := 10;
> b.Top := 10;
> b.Caption := "MyButton";
> h := LoadLibrary("Test.dll");
> proc := GetProcAddress(h, "DoBeep");
> FreeLibrary(h);
> end;
Зачем нужно здесь выгружать DLL? Как тогда вызовешь свою процедуру из DLL при нажатии кнопки?
Страницы: 1 вся ветка
Текущий архив: 2005.12.11;
Скачать: CL | DM;
Память: 0.45 MB
Время: 0.038 c