E2009 Types incompatibles - '%s' (Delphi)
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.