Delphi-PRAXiS
Seite 2 von 2     12   

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Programmieren allgemein (https://www.delphipraxis.net/40-programmieren-allgemein/)
-   -   Delphi Records unter 32 und 64Bit (https://www.delphipraxis.net/197680-records-unter-32-und-64bit.html)

Zacherl 27. Aug 2018 16:22

AW: Records unter 32 und 64Bit
 
Zitat:

Zitat von EWeiss (Beitrag 1411758)
Jo das geht.. wäre kein Problem aber wie ich schon sagte mit langen Pfaden funktioniert es auch unter 64Bit.

Kann schon sein, ist aber ebenfalls "Zufall", dass das funktioniert. Mit
Delphi-Quellcode:
String
deklariert bist du immer auf der sicheren Seite :thumb:

Uwe Raabe 27. Aug 2018 16:25

AW: Records unter 32 und 64Bit
 
Hat vermutlich gar nichts mit den Strings/PWideChars zu tun, aber

Delphi-Quellcode:
var
  ...
  DC: Cardinal;

...

DC := GetDC(MainHandle);
könnte unter 64-Bit einen Überlauf erzeugen, da ein HDC dort nicht mehr in einen Cardinal passt.

EWeiss 27. Aug 2018 16:28

AW: Records unter 32 und 64Bit
 
Zitat:

Zitat von Zacherl (Beitrag 1411759)
Zitat:

Zitat von EWeiss (Beitrag 1411758)
Jo das geht.. wäre kein Problem aber wie ich schon sagte mit langen Pfaden funktioniert es auch unter 64Bit.

Kann schon sein, ist aber ebenfalls "Zufall", dass das funktioniert. Mit
Delphi-Quellcode:
String
deklariert bist du immer auf der sicheren Seite :thumb:

Ich sollte mal Lotto spielen bei den ganzen Zufällen die ich habe und die zumeist funktionieren sollte ich schon bald Millionär sein ;)

So geht's. Mit String.
Muss da wohl insbesondere bei 64Bit in der Zukunft sehr drauf achten der Kompatibilität wegen.

Der sinn des ganzen warum ich hier einen PWideChar definiert habe ist dieser damit ich ihn nachher nicht nochmal casten muss bei der Übergabe an die Library.
Das muss ich hier jetzt tun.
Delphi-Quellcode:
gSpriteData[K].hBmp := gSprCtrl.GI_CreateMirrorBitmapFromFile
  (PWideChar(gSpriteData[K].ImageName), imgW, imgH);

Also ich habe mir schon was dabei gedacht. ;)

gruss

EWeiss 27. Aug 2018 16:31

AW: Records unter 32 und 64Bit
 
Zitat:

Zitat von Uwe Raabe (Beitrag 1411760)
Hat vermutlich gar nichts mit den Strings/PWideChars zu tun, aber

Delphi-Quellcode:
var
  ...
  DC: Cardinal;

...

DC := GetDC(MainHandle);
könnte unter 64-Bit einen Überlauf erzeugen, da ein HDC dort nicht mehr in einen Cardinal passt.

Ja das ist definitiv falsch (keine Ahnung was mich da wieder mal geritten hat) muss HDC sein.
Werde es beheben und berichten.

Danke.

PS:
Liegt am string..
Das DC ist nur für den Blink Button.

Diese Änderung wirkt sich auch nicht auf die CPU Auslastung aus die bleibt bei 64Bit 25%
Dort habe ich jetzt schon versucht MMTimer (Hochauflösender Timer vom MMSystem inkl. QueryPerformanceFrequency Callback usw.
Ein Sleep(0) oder Sleep(1) bringt auch nichts.
Den Timer auf 25ms zu setzen bremst das gesamte zeichnen aus.

Danke für eure Hilfe funktioniert jetzt so.

gruss

Dennis07 29. Aug 2018 18:43

AW: Records unter 32 und 64Bit
 
Kleine Anmerking, anstatt an dem ALIGN rumzuspielen, kann man auch einfach einen
Delphi-Quellcode:
packed record
bzw. ein
Delphi-Quellcode:
packed array
draus machen.

Zacherl 29. Aug 2018 21:31

AW: Records unter 32 und 64Bit
 
Zitat:

Zitat von Dennis07 (Beitrag 1411949)
Kleine Anmerking, anstatt an dem ALIGN rumzuspielen, kann man auch einfach einen
Delphi-Quellcode:
packed record
bzw. ein
Delphi-Quellcode:
packed array
draus machen.

Nöö, es geht ja nichtmal tatsächlich um Records, sondern um Enums. Und einfach den Record
Delphi-Quellcode:
packed
zu machen bringt gar nichts, wenn auf API-Seite (z.B. C Dll) der Record korrekt aligned ist. Das Alignment sollten die meisten Compiler sowieso gleich handhaben. Problematisch ist halt bei so Dingen, dass Delphi die Enums immer versucht in den kleinstmöglichen Typ zu packen (
Delphi-Quellcode:
{$Z1}
), während die Min-Enum-Size unter C/C++ der Größe eines
Delphi-Quellcode:
int
s entspricht, also unter Windows dann 4-Byte groß ist. Deshalb muss man Delphi an dieser Stelle mit
Delphi-Quellcode:
{$Z4}
beibringen dies für die betroffenden Enums ebenfalls so zu machen.

Und nebenbei ist
Delphi-Quellcode:
packed
äquivalent zu
Delphi-Quellcode:
{$A1}
, macht also keinen großen Unterschied was man verwendet - wobei ich persönlich das
Delphi-Quellcode:
packed
auch vorziehen würde.


Alle Zeitangaben in WEZ +1. Es ist jetzt 15:36 Uhr.
Seite 2 von 2     12   

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