Показать сообщение отдельно
  #15  
Старый 31.10.2015, 00:48
lmikle lmikle вне форума
Модератор
 
Регистрация: 17.04.2008
Сообщения: 8,096
Версия Delphi: 7, XE3, 10.2
Репутация: 49089
По умолчанию

Цитата:
Сообщение от 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;
Ну а что в библитечной функции писать - сам разберешься...