2013-08-23 98 views
6

tôi tổ chức mã nguồn ứng dụng của tôi vào đơn vị biên soạn Pascal sử dụng File -> New Unitquy tắc cú pháp cho Lazarus Pascal thủ tục "đơn vị"

Các đơn vị sau biên dịch 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; 
... 

Tuy nhiên chương trình này có lỗi biên dịch như nó không thể xác định "ngoại lệ" tại dòng 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);  
... 

Nếu tôi cho rằng Exception được định nghĩa trong SysUtils (làm thế nào tôi có thể nói?) Tôi không thể đưa uses SysUtils trước interface (trình biên dịch phàn nàn nó đã mong interface)

Làm thế nào để nói với trình biên dịch rằng Exception được định nghĩa trong SysUtils?

+0

Tôi nghĩ rằng bạn cần phải đặt 'cái sử dụng dòng SysUtils' ngay sau khi' dòng interface' (ví dụ: không trước khi nó). –

Trả lời

6

Các đơn vị khác được sử dụng bởi đơn vị của bạn sẽ được tham chiếu sau từ khóa giao diện, nhưng trước các câu lệnh khác trong phần giao diện.

dụ của bạn nên làm việc trong các hình thức sau đây:

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);