Цитата:
Сообщение от Bargest
Ну еще бы она работала. Вызывается процедура, в какую-то свою локальную переменную что-то зачем-то пишет. И? Она даже не принимает на вход нажатую клавишу, не говоря уже о каких-то выходных результатах.
|
А особенно смешно выглядит вот это:
Код:
try
//Загружаем 'Tube_Smoke.dll'
DLLHandle := LoadLibrary('Tube_Smoke.dll');
except
FreeLibrary(DLLHandle);
ShowMessage('Не удалось загрузить DLL ...');
end;
Код в except вообще никогда не выполнится

И это хорошо, бо как фиг его знает, что он попытается освободить по DLLHandle = 0. Хорошо, если просто проигнорирует вызов.
А потом код пойдет дальше и будет пытаться у того же модуля с хэндлом = 0 получить адрес процедуры... ну вы поняли...
Кароче, вот если уж так хочется делать через одно место, то:
Код:
type
TEditKeyPressCheck = function (AText: String; AKey : Char) : Char;
procedure TForm1.Edit1KeyPress(Sender : TObject; Key : Char);
var
AHandle : THandle;
Proc : TEditKeyPressCheck;
begin
Try
AHandle := LoadLibrary('...');
If AHandle = 0 Then Raise Exception.Create('Oops... can''t load library.');
Try
Proc := GetProcAddress(AHandle,'Check_Edit');
If Proc = Nil Then Raise Exception.Create('Oops.. can''t find function.');
Key := Proc((Sender As TEdit).Text,Key);
Finally
FreeLibrary(AHandle);
End;
Except
On E : Exception Do
Begin
ShowMessage(E.Message);
Key := #0;
End;
End;
end;
Ну а что в библитечной функции писать - сам разберешься...