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.