2

デカール貼りました

type  TProcedure = procedure(const messageText : String) of object;

decodeProcedure : TProcedure; その後、さまざまな場所に割り当てられるそのタイプの変数があります。

ブレークポイントで停止した場合、変数が指しているプロシージャを確認するにはどうすればよいですか?

Debug/evaluateエラーadd watchが発生した場合E2035 Not enough actual parameters

(デルファイ XE 2)

4

1 に答える 1

5

@演算子を使用してdecodeProcedureメソッドのアドレスを評価し、その式をウォッチリストウィンドウに追加して、local variablesウィンドウを使用できるプロシージャポイントを確認できます。

このコードを試してください

{$APPTYPE CONSOLE}

{$R *.res}

uses
  System.SysUtils;

type
  TProcedure = procedure(const messageText : String) of object;
  TFooClass = class
     decodeProcedure  : TProcedure;
   public
     procedure Bar(const messageText : String);
     procedure DoIt;
  end;

Var
  F : TFooClass;
{ TFooClass }

procedure TFooClass.Bar(const messageText: String);
begin
  Writeln(messageText);
end;

procedure TFooClass.DoIt;
begin
  if Assigned(decodeProcedure) then //put a break point here
   decodeProcedure('Hello');
end;

begin
  try
     F:=TFooClass.Create;
     try
       F.decodeProcedure:=F.Bar;
       F.DoIt;
     finally
      F.Free;
     end;
  except
    on E: Exception do
      Writeln(E.ClassName, ': ', E.Message);
  end;
end.

そして、これはIDEのスクリーンショットの例です

ここに画像の説明を入力

ご覧のlocal variablesように、decodeprocedure がどのTFooClass.Barメソッドを指しているかがウィンドウに表示されます。

更新Self式をウォッチリストに 追加して、同じ結果を取得することもできます

ここに画像の説明を入力

于 2012-05-05T01:16:41.717 に答える