AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Sprachen und Entwicklungsumgebungen Die Delphi-IDE Problem mit Delphi 12 CE mit überladenen Funktionen
Thema durchsuchen
Ansicht
Themen-Optionen

Problem mit Delphi 12 CE mit überladenen Funktionen

Ein Thema von Maekkelrajter · begonnen am 31. Jul 2024 · letzter Beitrag vom 1. Aug 2024
Antwort Antwort
Maekkelrajter

Registriert seit: 8. Mär 2017
Ort: Köln
157 Beiträge
 
Delphi 12 Athens
 
#1

Problem mit Delphi 12 CE mit überladenen Funktionen

  Alt 31. Jul 2024, 13:15
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:
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;
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.
Gibt es womöglich in der D12 IDE eine Einstellung, mit der man das beeinflussen kann?


Gruß LP
  Mit Zitat antworten Zitat
LoZe

Registriert seit: 27. Dez 2016
Ort: Ulm
40 Beiträge
 
Delphi 12 Athens
 
#2

AW: Problem mit Delphi 12 CE mit überladenen Funktionen

  Alt 31. Jul 2024, 13:21
nur ne Idee wenn du System.Math.Max(... und System.Math.Min(.. schreibst sollte es nicht mehr Doppeldeutig sein.
Chris
  Mit Zitat antworten Zitat
Maekkelrajter

Registriert seit: 8. Mär 2017
Ort: Köln
157 Beiträge
 
Delphi 12 Athens
 
#3

AW: Problem mit Delphi 12 CE mit überladenen Funktionen

  Alt 31. Jul 2024, 14:27
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:
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;
Die 'uses'- Klausel sieht so aus:
Delphi-Quellcode:
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;
Ich wüsste aber doch gerne, warum das unter D 12 nicht mehr funktioniert.

Gruß LP
  Mit Zitat antworten Zitat
Benutzerbild von Uwe Raabe
Uwe Raabe

Registriert seit: 20. Jan 2006
Ort: Lübbecke
11.475 Beiträge
 
Delphi 12 Athens
 
#4

AW: Problem mit Delphi 12 CE mit überladenen Funktionen

  Alt 31. Jul 2024, 14:32
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).
Uwe Raabe
Certified Delphi Master Developer
Embarcadero MVP
Blog: The Art of Delphi Programming
  Mit Zitat antworten Zitat
Maekkelrajter

Registriert seit: 8. Mär 2017
Ort: Köln
157 Beiträge
 
Delphi 12 Athens
 
#5

AW: Problem mit Delphi 12 CE mit überladenen Funktionen

  Alt 31. Jul 2024, 23:37
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).
Das erklärt einiges. Gleichnamige Funktionen mit identischer Signatur sind nämlich in der Unit JclLogic ebenfalls vorhanden.
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

Gruß LP

Geändert von Maekkelrajter (31. Jul 2024 um 23:42 Uhr)
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
44.184 Beiträge
 
Delphi 12 Athens
 
#6

AW: Problem mit Delphi 12 CE mit überladenen Funktionen

  Alt 1. Aug 2024, 00:25
Oder per {$if CompilerVersion < 36} die nun unnötigen Überladungen der JclLogic entfernen.

Oder via {$IFnDEF DELPHI12_UP oder {$IFDEF DELPHI11ANDBEFORE oder wie auch immer die JCL sich sowas bestimmt definiert hat.
$2B or not $2B

Geändert von himitsu ( 1. Aug 2024 um 00:28 Uhr)
  Mit Zitat antworten Zitat
Maekkelrajter

Registriert seit: 8. Mär 2017
Ort: Köln
157 Beiträge
 
Delphi 12 Athens
 
#7

AW: Problem mit Delphi 12 CE mit überladenen Funktionen

  Alt 1. Aug 2024, 10:45
Oder per {$if CompilerVersion < 36} die nun unnötigen Überladungen der JclLogic entfernen.

Oder via {$IFnDEF DELPHI12_UP oder {$IFDEF DELPHI11ANDBEFORE oder wie auch immer die JCL sich sowas bestimmt definiert hat.
Dann müsste aber sichergestellt sein, dass in der gesamten JCL überall dort, wo Aufrufe von Min oder Max erfolgen, auch system.math eingebunden ist. Das überlasse ich aber lieber den Jedi - Machern für das nächste Update.

Edit:
Das Update liegt bereits vor.
Gerade habe ich das neueste von den JCL Daily Packages heruntergeladenhttps://jcl.sourceforge.net/daily/
Dort finden sich exakt die Modifikationen, die ich bei meiner Installation bereits vorgenommen hatte.
Geht doch!

Gruß LP

Geändert von Maekkelrajter ( 1. Aug 2024 um 13:50 Uhr)
  Mit Zitat antworten Zitat
Antwort Antwort


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 01:15 Uhr.
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz