Если в DLL вызываешь процедуру с такой сигнатурой
Код:
type TProc = Procedure();
то и передавай в неё такую процедуру. Ежели передаёшь метод формы - то получишь ошибку, может быть не сразу.
Когда в DLL передаёшь указатель на вот это
Код:
procedure Tmain.perebor(Sender:Tobject);
А вызываешь как простую функцию без параметров, то вызов произойдёт, НО!
функция ожидает два параметра TForm и Sender, а в регистрах EAX и EDX.
А там мусор.
....
Если в DLL хочешь передавать только
один указатель, тогда в EXE нужно написать
Код:
type
Tvideodriver = class(TForm)
procedure perebor(Sender: TObject);
procedure Button1Click(Sender:TObject);
end;
var
videodriver:Tvideodriver;
type
TProc = Procedure();
procedure RunStopHook(State : Boolean;pointperebor:TProc);// лучше сразу указывать правильный тип
stdcall; external 'hookkey.dll';
implementation
procedure perebor();// свободная процедура
begin
videodriver.Perebor(Nil); // используется глобальная переменная videodriver:Tvideodriver;
end;
procedure Tvideodriver.Button1Click(Sender:TObject);
begin
RunStopHook(true,perebor); //<<== заметь, без @ и без скобок
end;