E2009 型に互換性がありません : %s (Delphi)

提供: RAD Studio
移動先: 案内検索

エラーと警告のメッセージ(Delphi) への移動

手続きの宣言と使い方の間に違いがありました。


program Produce;

  type
    ProcedureParm0 = procedure; stdcall;
    ProcedureParm1 = procedure(VAR x : Integer);

  procedure WrongConvention; register;
  begin
  end;

  procedure WrongParms(x, y, z : Integer);
  begin
  end;

  procedure TakesParm0(p : ProcedureParm0);
  begin
  end;

  procedure TakesParm1(p : ProcedureParm1);
  begin
  end;

begin
  TakesParm0(WrongConvention);
  TakesParm1(WrongParms);
end.

{ ProcedureParm0 型が stdcall 手続きを期待しているにもかかわらず,register 呼び出し規約を使って WrongConvention を宣言したため,TakesParm0 を呼び出すとエラーになる。同様に,TakesParm1 の呼び出しはパラメータリストの不一致によって失敗する }


program Solve;

  type
    ProcedureParm0 = procedure; stdcall;
    ProcedureParm1 = procedure(VAR x : Integer);

  procedure RightConvention; stdcall;
  begin
  end;

  procedure RightParms(VAR x : Integer);
  begin
  end;

  procedure TakesParm0(p : ProcedureParm0);
  begin
  end;

  procedure TakesParm1(p : ProcedureParm1);
  begin
  end;

begin
  TakesParm0(RightConvention);
  TakesParm1(RightParms);
end.

{ この 2 つの問題は呼び出し規約またはパラメータリストを宣言に一致させればどちらも解決する }