E2009 Types incompatibles - '%s' (Delphi)

De RAD Studio
Aller à : navigation, rechercher

Remonter à Messages d'erreur et d'avertissement (Delphi)

Le compilateur a détecté une différence entre la déclaration et l'utilisation d'une procédure.


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.

L'appel de 'TakesParm0' provoquera une erreur car le type 'ProcedureParm0' attend une procédure 'stdcall' alors que 'WrongConvention' est déclarée avec la convention d'appel 'register'. De même, l'appel de 'TakesParm1' échouera car les listes de paramètres ne correspondent pas.


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.

La solution à ces deux problèmes consiste à s'assurer que la convention d'appel ou les listes de paramètres correspondent à la déclaration.