![]() |
Problem mit Delphi 12 CE mit überladenen Funktionen
Gestern habe ich die Delphi 12 CE installiert. Die Installation verlief problemlos. Als Erstes habe ich mein aktuelles Projekt geladen und versucht zu compilieren. Dieses Projekt verwendet die Jedi Code Library, was bisher (Delphi 11.3 CE) problemlos funktionierte. Leider in tritt mit der D12 CE ein Fehler in der Unit JclGraphUtils auf:
Delphi-Quellcode:
Die Funktionen Max() und Min(), die in system.math deklariert sind, erzeugen den Fehler 'Doppeldeutiger überladener Ausdruck', unter 11.3 CE gab es das Problem nicht.
procedure CMYKToBGR(const Source, Target: Pointer; const BitsPerSample: Byte; Count: Cardinal); overload;
var R, G, B, K: Integer; I: Integer; SourcePtr: PCMYK; SourcePtr16: PCMYK16; TargetPtr: PByte; begin case BitsPerSample of 8: begin SourcePtr := Source; TargetPtr := Target; Count := Count div 4; for I := 0 to Count - 1 do begin K := SourcePtr.K; R := 255 - (SourcePtr.C - MulDiv(SourcePtr.C, K, 255) + K); G := 255 - (SourcePtr.M - MulDiv(SourcePtr.M, K, 255) + K); B := 255 - (SourcePtr.Y - MulDiv(SourcePtr.Y, K, 255) + K); TargetPtr^ := Max(0, Min(255, Byte(B)));// Fehler 'Doppeldeutiger überladener Ausdruck' (Max und Min) Inc(TargetPtr); TargetPtr^ := Max(0, Min(255, Byte(G)));// Fehler 'Doppeldeutiger überladener Ausdruck' (Max und Min) Inc(TargetPtr); TargetPtr^ := Max(0, Min(255, Byte(R)));// Fehler 'Doppeldeutiger überladener Ausdruck' (Max und Min) Inc(TargetPtr); Inc(SourcePtr); end; end; 16: begin SourcePtr16 := Source; TargetPtr := Target; Count := Count div 4; for I := 0 to Count - 1 do begin K := SourcePtr16.K; R := 255 - (SourcePtr16.C - MulDiv(SourcePtr16.C, K, 65535) + K) shr 8; G := 255 - (SourcePtr16.M - MulDiv(SourcePtr16.M, K, 65535) + K) shr 8; B := 255 - (SourcePtr16.Y - MulDiv(SourcePtr16.Y, K, 65535) + K) shr 8; TargetPtr^ := Max(0, Min(255, Byte(B)));// Fehler 'Doppeldeutiger überladener Ausdruck' (Max und Min) Inc(TargetPtr); TargetPtr^ := Max(0, Min(255, Byte(G)));// Fehler 'Doppeldeutiger überladener Ausdruck' (Max und Min) Inc(TargetPtr); TargetPtr^ := Max(0, Min(255, Byte(R)));// Fehler 'Doppeldeutiger überladener Ausdruck' (Max und Min) Inc(TargetPtr); Inc(SourcePtr16); end; end; else raise EColorConversionError.CreateResFmt(@RsBitsPerSampleNotSupported, [BitsPerSample]); end; end; Gibt es womöglich in der D12 IDE eine Einstellung, mit der man das beeinflussen kann? Gruß LP |
AW: Problem mit Delphi 12 CE mit überladenen Funktionen
nur ne Idee wenn du
Delphi-Quellcode:
und
System.Math.Max(...
Delphi-Quellcode:
schreibst sollte es nicht mehr Doppeldeutig sein.
System.Math.Min(..
|
AW: Problem mit Delphi 12 CE mit überladenen Funktionen
Ja, so funktioniert's tatsächlich. Die Funktionen Min() und Max() sind nämlich auch in der Unit JclLogic deklariert. Die werden in JclGraphUtils allerdings so aufgerufen:
Delphi-Quellcode:
Die 'uses'- Klausel sieht so aus:
function RectIntersection(const R1, R2: TRect): TRect;
begin with Result do begin Left := JclLogic.Max(R1.Left, R2.Left); Top := JclLogic.Max(R1.Top, R2.Top); Right := JclLogic.Min(R1.Right, R2.Right); Bottom := JclLogic.Min(R1.Bottom, R2.Bottom); end; if not RectIsValid(Result) then Result := NullRect; end;
Delphi-Quellcode:
Ich wüsste aber doch gerne, warum das unter D 12 nicht mehr funktioniert.
implementation
uses {$IFDEF HAS_UNITSCOPE} System.Classes, Vcl.Consts, System.Math, {$ELSE ~HAS_UNITSCOPE} Classes, Math, {$IFDEF FPC} RTLConsts, {$ELSE ~FPC} Consts, {$ENDIF ~FPC} {$ENDIF ~HAS_UNITSCOPE} {$IFDEF HAS_UNIT_SYSTEM_UITYPES} System.UITypes, {$ENDIF HAS_UNIT_SYSTEM_UITYPES} JclVclResources, JclSysInfo, JclLogic; Gruß LP |
AW: Problem mit Delphi 12 CE mit überladenen Funktionen
Delphi 12 führt neue Overloads für Byte, ShortInt, SmallInt, Word und Cardinal bei Max und Min ein (bei Win32 auch für Currency).
|
AW: Problem mit Delphi 12 CE mit überladenen Funktionen
Zitat:
Die waren auch ganz sicher mit den Aufrufen in JclGraphUtils eigentlich 'gemeint'. Ich habe jetzt in der Unit JclGraphUtils alle Aufufe von Min und Max mit 'JclLogic.' qualifiziert. Nun läuft's wie geschmiert :-D Gruß LP |
AW: Problem mit Delphi 12 CE mit überladenen Funktionen
Oder per
Delphi-Quellcode:
die nun unnötigen Überladungen der JclLogic entfernen. :angle2:
{$if CompilerVersion < 36}
Oder via
Delphi-Quellcode:
oder
{$IFnDEF DELPHI12_UP
Delphi-Quellcode:
oder wie auch immer die JCL sich sowas bestimmt definiert hat.
{$IFDEF DELPHI11ANDBEFORE
|
AW: Problem mit Delphi 12 CE mit überladenen Funktionen
Zitat:
Edit: Das Update liegt bereits vor. Gerade habe ich das neueste von den JCL Daily Packages heruntergeladen ![]() Dort finden sich exakt die Modifikationen, die ich bei meiner Installation bereits vorgenommen hatte. Geht doch! Gruß LP |
Alle Zeitangaben in WEZ +1. Es ist jetzt 01:39 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