Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Algorithmen, Datenstrukturen und Klassendesign (https://www.delphipraxis.net/78-algorithmen-datenstrukturen-und-klassendesign/)
-   -   Delphi E2291 Implementierung der Interface-Methode ... fehlt (https://www.delphipraxis.net/215702-e2291-implementierung-der-interface-methode-fehlt.html)

SearchBot 23. Aug 2024 17:16

E2291 Implementierung der Interface-Methode ... fehlt
 
Hi,

ich habe jetzt Delphi 12 und davor aber Berlin gehabt.

Eine Komponente, die auch für 10.4 gemacht ist (neuere hab ich nicht, daher nehme ich diese Version; die Berlin-Version ließ sich fehlerfrei compilieren) erzählt mir jetzt beim Compilieren:
Zitat:

[dcc32 Fehler] .. E2291 Implementierung der Interface-Methode IDWriteTextRenderer.DrawInlineObject fehlt
Da schau ich dann genau hin:
Delphi-Quellcode:
type
  TTextRendering = class(TInterfacedPersistent, IDWriteTextRenderer) // <- diese Zeile wird bemeckert, das "class" unterwellt
  private
// unter anderen:
    function DrawInlineObject(clientDrawingContext: Pointer; originX: Single;
      originY: Single; var inlineObject: IDWriteInlineObject; isSideways: BOOL;
      isRightToLeft: BOOL; const clientDrawingEffect: IUnknown): HResult; stdcall;
und weiter unten in der Unit
Delphi-Quellcode:
function TTextRendering.DrawInlineObject(clientDrawingContext: Pointer;
  originX: Single; originY: Single; var inlineObject: IDWriteInlineObject;
  isSideways: BOOL; isRightToLeft: BOOL; const clientDrawingEffect: IUnknown): HResult;
begin
  Result := S_OK;
end;
:gruebel: Hä? Ist doch da?!

Und das IDWriteTextRenderer ist in Winapi.D2D1 zu finden, Zeile 5830:
Delphi-Quellcode:
  IDWriteTextRenderer = interface(IDWritePixelSnapping)
// unter anderem
    function DrawInlineObject(clientDrawingContext: Pointer; originX: Single;
      originY: Single; const inlineObject: IDWriteInlineObject; isSideways: BOOL;
      isRightToLeft: BOOL; const clientDrawingEffect: IUnknown): HResult; stdcall;
Was braucht der Compiler denn jetzt?
Wie behebe ich das?

DeddyH 23. Aug 2024 17:54

AW: E2291 Implementierung der Interface-Methode ... fehlt
 
In Deiner „alten“ Methode ist InlineObject als Var deklariert, im neuen Delphi aber als Const. Daher wird die Methode nicht mehr als zum Interface gehörig erkannt.

SearchBot 26. Aug 2024 08:26

AW: E2291 Implementierung der Interface-Methode ... fehlt
 
Aha. Und wie ändere ich das?

DeddyH 26. Aug 2024 09:11

AW: E2291 Implementierung der Interface-Methode ... fehlt
 
Indem Du in "Deinem" Source den Var- in einen Const-Parameter änderst.
Delphi-Quellcode:
function DrawInlineObject(clientDrawingContext: Pointer; originX: Single;
      originY: Single; {alt: var}const inlineObject: IDWriteInlineObject; isSideways: BOOL;
      isRightToLeft: BOOL; const clientDrawingEffect: IUnknown): HResult; stdcall;

SearchBot 26. Aug 2024 09:18

AW: E2291 Implementierung der Interface-Methode ... fehlt
 
Ah :thumb:

Beeindruckend, sofort war der Fehler weg. Dankeschön, wieder was gelernt :thumb:


Alle Zeitangaben in WEZ +1. Es ist jetzt 04:34 Uhr.

Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz