Цитата:
	
	
		| 
			
				 Сообщение от Bargest 
				Внимательно прочитай, что такое пара try/finally и чем отличается блок finally от блока except. 
А вообще-то lmikle совершенно прав. 
			
		 | 
	
	
 
Да, косяк.  Вот к чему приводит бездумное копирование чужого кода.
Досадно когда тратишь кучу времени на поиск подходящего материала,  а тебе подсовывают заведомо не рабочий код.
Заменил на except.
	Код:
	procedure TForm1.Edit1KeyPress(Sender: TObject; var Key: Char);
var
DLLRoutine: procedure; //объявление процедурной переменной
DllHandle: THandle;
begin
   try
   //Загружаем 'Tube_Smoke.dll'
    DLLHandle := LoadLibrary('Tube_Smoke.dll');
  except
    FreeLibrary(DLLHandle);
    ShowMessage('Не удалось загрузить DLL ...');
    end;
    try
    { DLLRoutine указывает на процедуру 'Check_Edit' в файле 'Tube_Smoke.dll' }
    DLLRoutine := GetProcAddress(DLLHandle,'Check_Edit');
    { Вызываем процедуру 'Check_Edit' }
    if Assigned(DLLRoutine) then
      DLLRoutine;
    if   GetProcAddress(DLLHandle,'Check_Edit') = nil then
      ShowMessage('Не удалось получить доступ к процедуре...');
     except
    FreeLibrary(DLLHandle);
  end;
  end; 
 
 
Компилирует без ошибок, но и процедура не работает -  в Edit удаётся забить буквы и арифметические символы.