2009-07-13 568 views
21

私はPrism(ネット)ではなくDelphiネイティブを求めています。Delphiで例外を発生させる方法は?

これは私のコードです:

raise Exception.Create('some test'); 

Undeclarated idenitifier "例外"。

、どのように私は例外を発生させる/問題投げるんですか?

答えて

63

例外クラス「例外」は、単位sysutilsの中で宣言されています。したがって、uses節に "SysUtils"を追加する必要があります。

uses 
    SysUtils; 

procedure RaiseMyException; 
begin 
    raise Exception.Create('Hallo World!'); 
end; 
+3

、 "宣言されていない識別子"のエラーは、あなたが関心のある識別子を含むソースコードを検索することで解決できることがよくあります。それは宣言されている場所を教えてくれますし、 D2006の+で –

+14

(多分2005?)あなたは「リファクタリング - >単位の検索」を使用することができ、あなたのuses節に必要なユニットを追加するための右クリックメニューからオプションを選択します。 –

+0

Gerry - そこにすばらしい追加のヒント!...私は、私はその機能に気づいたことはないと言って恥ずかしいです。とてもかっこいい。 :) – Jamo

5

あなたはありませんsysutilsのを使用していますか?例外はIIRCに宣言されています。

7

あなたはそれは一言で言えばデルファイに応じで構築されており、オプションであるされていない、uses節にのsysutilsを追加する必要があります。

10

使用ユニットにSYSUTILSを追加することを忘れないでください。

私もmessaggesと例外の意味のフォーマット、あなたのカテゴリを追跡する良い方法を提案:

Type TMyException=class 
public 
    class procedure RaiseError1(param:integer); 
    class procedure RaiseError2(param1,param2:integer); 
    class procedure RaiseError3(param:string); 
end; 

implementation 

class procedure TMyException.RaiseError1(param:integer); 
begin 
    raise Exception.create(format('This is an exception with param %d',[param])); 
end; 

//declare here other RaiseErrorX 

これを使用しての簡単な方法は次のとおりです。今後の参考のために

TMyException.RaiseError1(123); 
+4

のconst – mjn

+0

@mjnの配列とフォーマットをサポートしていますが、それは、クライアントの生活( 'TMyException'を使用するコードは)非常に簡単になります' Exception.CreateFmt'がすでにある - ちょうどパラメータと渡します残りは 'TMyException'で行われます。 –

+1

@EdwinYip私が言っていることは、 'raise Exception.create(format( 'これはparam%d'、[param])を持つ例外です)' '短縮できます' raise Exception.CreateFmt( 'これは例外です。 param%d '、[param]); 'キーストロークが少なくても同じことをします – mjn

関連する問題