E2009 型に互換性がありません : %s (Delphi)
エラーと警告のメッセージ(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 つの問題は呼び出し規約またはパラメータリストを宣言に一致させればどちらも解決する }