Правила синтаксиса для процедурных модулей Lazarus Pascal

Я организую исходный код своего приложения в единицы компиляции Pascal, используя File -> New Unit

Следующий модуль компилируется OK...

unit CryptoUnit;

{$mode objfpc}{$H+}

interface
  function Encrypt(key, plaintext:string):string;
  function Decrypt(key, ciphertext:string):string;

implementation

uses
  Classes, SysUtils, Blowfish;

function Encrypt(key, plaintext:string):string; 
...

Однако у этого есть ошибки компиляции, поскольку он не может идентифицировать «Исключение» в строке 6...

unit ExceptionUnit;

{$mode objfpc}{$H+}

interface
  procedure DumpExceptionCallStack(E: Exception);  // <--- problem

implementation

uses
  Classes, SysUtils, FileUtil;


{ See http://wiki.freepascal.org/Logging_exceptions }

procedure DumpExceptionCallStack(E: Exception);      
...

Если я предполагаю, что Exception определено в SysUtils (как я могу сказать?), я не могу поставить uses SysUtils перед interface (компилятор жалуется, что ожидал interface)

Как сообщить компилятору, что Exception определено в SysUtils?


person RedGrittyBrick    schedule 23.08.2013    source источник
comment
Я думаю, вам нужно поставить строку uses SysUtils сразу после строки interface (т.е. не перед ней).   -  person Paul R    schedule 23.08.2013


Ответы (1)


На другие модули, используемые вашим модулем, следует ссылаться после ключевого слова интерфейса, но перед другими утверждениями в разделе интерфейса.

Ваш пример должен работать в следующей форме:

unit ExceptionUnit;

{$mode objfpc}{$H+}

interface

uses
  Classes, SysUtils, FileUtil;

procedure DumpExceptionCallStack(E: Exception);

implementation

{ See http://wiki.freepascal.org/Logging_exceptions }

procedure DumpExceptionCallStack(E: Exception); 
person jwdietrich    schedule 23.08.2013