AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

Records unter 32 und 64Bit

Ein Thema von EWeiss · begonnen am 27. Aug 2018 · letzter Beitrag vom 29. Aug 2018
Antwort Antwort
Seite 2 von 2     12   
Benutzerbild von Zacherl
Zacherl

Registriert seit: 3. Sep 2004
4.629 Beiträge
 
Delphi 10.2 Tokyo Starter
 
#11

AW: Records unter 32 und 64Bit

  Alt 27. Aug 2018, 17:22
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 String deklariert bist du immer auf der sicheren Seite
Projekte:
- GitHub (Profil, zyantific)
- zYan Disassembler Engine ( Zydis Online, Zydis GitHub)
  Mit Zitat antworten Zitat
Benutzerbild von Uwe Raabe
Uwe Raabe

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

AW: Records unter 32 und 64Bit

  Alt 27. Aug 2018, 17:25
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.
Uwe Raabe
Certified Delphi Master Developer
Embarcadero MVP
Blog: The Art of Delphi Programming
  Mit Zitat antworten Zitat
EWeiss
(Gast)

n/a Beiträge
 
#13

AW: Records unter 32 und 64Bit

  Alt 27. Aug 2018, 17:28
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 String deklariert bist du immer auf der sicheren Seite
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

Geändert von EWeiss (27. Aug 2018 um 18:21 Uhr)
  Mit Zitat antworten Zitat
EWeiss
(Gast)

n/a Beiträge
 
#14

AW: Records unter 32 und 64Bit

  Alt 27. Aug 2018, 17:31
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

Geändert von EWeiss (27. Aug 2018 um 18:09 Uhr)
  Mit Zitat antworten Zitat
Dennis07

Registriert seit: 19. Sep 2011
Ort: Deutschland
488 Beiträge
 
Delphi 11 Alexandria
 
#15

AW: Records unter 32 und 64Bit

  Alt 29. Aug 2018, 19:43
Kleine Anmerking, anstatt an dem ALIGN rumzuspielen, kann man auch einfach einen packed record bzw. ein packed array draus machen.
Dennis
  Mit Zitat antworten Zitat
Benutzerbild von Zacherl
Zacherl

Registriert seit: 3. Sep 2004
4.629 Beiträge
 
Delphi 10.2 Tokyo Starter
 
#16

AW: Records unter 32 und 64Bit

  Alt 29. Aug 2018, 22:31
Kleine Anmerking, anstatt an dem ALIGN rumzuspielen, kann man auch einfach einen packed record bzw. ein packed array draus machen.
Nöö, es geht ja nichtmal tatsächlich um Records, sondern um Enums. Und einfach den Record 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 ({$Z1} ), während die Min-Enum-Size unter C/C++ der Größe eines int s entspricht, also unter Windows dann 4-Byte groß ist. Deshalb muss man Delphi an dieser Stelle mit {$Z4} beibringen dies für die betroffenden Enums ebenfalls so zu machen.

Und nebenbei ist packed äquivalent zu {$A1} , macht also keinen großen Unterschied was man verwendet - wobei ich persönlich das packed auch vorziehen würde.
Projekte:
- GitHub (Profil, zyantific)
- zYan Disassembler Engine ( Zydis Online, Zydis GitHub)
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 2 von 2     12   


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 10:47 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