Hi,
ich habe versucht, das Projekt CAD2D von Git (CADSys42-master\Demos\CAD2D) zu kompilieren (WIndows 10 x64, Lazarus 2.0.10 x64). Der Compiler meldet einen Overload-Konflikt
"CS4DXFModule.pas(824,42) Error: Can't determine which overloaded function to call"
bei einem Aufruf der Round() funktion.
Andere mathematische Functionen wir Trunc() verhalten sich ebenso.
gencurr.inc(17,14) Hint: Found declaration: Trunc(Currency):Int64;
mathh.inc(117,14) Hint: Found declaration: Trunc(Double):Int64; InternProc;
Ich verstehe, denke ich, so ungefär, wo da Problem herkommt: man hat versucht, einen Datentype "Currency" einzuführen, der aber auf meiner Plattform auf "Double" gemappt wird, und damit haben wir den Salat.
Ich vermute weiterhin, dass dieses Problem sofort verschwindet, wenn ich auf Lazarus 32-Bit umsteige, soweit ich einige Posts rund um das Flag FPC_CURRENCY_IS_INT64 verstanden habe, das ebenfalls mitmischt.
Gibt es auch eine andere Möglichkeit, dieses Problem zu lösen, ohne auf Lazarus x32 zu wechseln?
Armin.
Konflikt bei Round(), Trunc() usw. zwischen mathh.inc und gencurr.inc
-
- Beiträge: 955
- Registriert: Mi 3. Jun 2020, 07:18
- OS, Lazarus, FPC: L 2.0.8, FPC Trunk, OS Win/Linux
- CPU-Target: Aarch64 bis Z80 ;)
- Wohnort: München
Re: Konflikt bei Round(), Trunc() usw. zwischen mathh.inc und gencurr.inc
Nicht ganz. Currency ist letztlich intern ein 64-bit Integer, der allerdings unter x86 Platformen (i8086, i386, x86_64) von der FPU behandelt wird, also dort auf Extended gemappt ist, mit Ausnahme von x86_64-win64. Auf nicht-x86 Systemen sowie eben für x86_64-win64 ist Currency tatsächlich auf Int64 gemappt. Das Problem ist nun, dass der Compiler Probleme damit hatte einen Currency, der dort intern ein Int64 ist, auf Round(Single) oder Round(Double) anzuwenden. Dies ist einerseits im Trunk von FPC behoben und wird auch im nächsten Release 3.2.2 gefixt sein.Nimral hat geschrieben: Di 2. Feb 2021, 12:54 Ich verstehe, denke ich, so ungefär, wo da Problem herkommt: man hat versucht, einen Datentype "Currency" einzuführen, der aber auf meiner Plattform auf "Double" gemappt wird, und damit haben wir den Salat.
Entweder du kompilierst für 32-bit oder du installierst dir die Fixes Version 3.2.1 von FPC (zum Beispiel mit Hilfe von fpcupdeluxe).Nimral hat geschrieben: Di 2. Feb 2021, 12:54 Gibt es auch eine andere Möglichkeit, dieses Problem zu lösen, ohne auf Lazarus x32 zu wechseln?
FPC Compiler Entwickler
Re: Konflikt bei Round(), Trunc() usw. zwischen mathh.inc und gencurr.inc
Bitte mache genauere Angaben. Wo ist das Problem einen exakten Link in die Nachricht zu kopieren?
Ich habe nach CAD2D gesucht und bin auf https://tenado.de/de/produkte/tenado-cad/tenado-cad-2d/ gelandet, einer kommerziellen Seite, die keinen github-link enthält. Im zweiten Versuch habe ich nach ""CS4DXFModule" gesucht, und da kam ich auf https://github.com/michalgw/CADSys42, wo es auch tatsächlich einen Ordner demos\CAD2D gibt. Aber das enthaltene Projekt kompiliert unter Laz 2.0.10x64 und Laz-trunk-x64 auf Win10x64 einwandfrei, genauso wie die beiden anderen Beispielprojekte.
Ich habe nach CAD2D gesucht und bin auf https://tenado.de/de/produkte/tenado-cad/tenado-cad-2d/ gelandet, einer kommerziellen Seite, die keinen github-link enthält. Im zweiten Versuch habe ich nach ""CS4DXFModule" gesucht, und da kam ich auf https://github.com/michalgw/CADSys42, wo es auch tatsächlich einen Ordner demos\CAD2D gibt. Aber das enthaltene Projekt kompiliert unter Laz 2.0.10x64 und Laz-trunk-x64 auf Win10x64 einwandfrei, genauso wie die beiden anderen Beispielprojekte.
Re: Konflikt bei Round(), Trunc() usw. zwischen mathh.inc und gencurr.inc
@PascalDragon
wie Du schon vermutet hast, unter 32 Bit geht das Projekt tadellos durch. Da mir 64 Bit sowieso nichts bringt, bleibe ich dabei.
Danke für den Hinweis auf dem Fix, den kannte ich nicht, und die Hinweise zu den technischen Hintergründen - "again what learned"
HG, Armin.
wie Du schon vermutet hast, unter 32 Bit geht das Projekt tadellos durch. Da mir 64 Bit sowieso nichts bringt, bleibe ich dabei.
Danke für den Hinweis auf dem Fix, den kannte ich nicht, und die Hinweise zu den technischen Hintergründen - "again what learned"

HG, Armin.