AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Programmieren allgemein Delphi Records funktionieren nicht unter 64Bit

Records funktionieren nicht unter 64Bit

Ein Thema von EWeiss · begonnen am 23. Aug 2018 · letzter Beitrag vom 23. Aug 2018
Antwort Antwort
Seite 1 von 2  1 2   
EWeiss
(Gast)

n/a Beiträge
 
#1

Records funktionieren nicht unter 64Bit

  Alt 23. Aug 2018, 18:04
Delphi-Quellcode:
  MatrixOrder = (
    MatrixOrderPrepend,
    MatrixOrderAppend
  );
  TMatrixOrder = MatrixOrder;
  GpMatrixOrder = TMatrixOrder;
GdipRotateWorldTransform: function(Graphics: LONG_PTR; angle: Single; order: GpMatrixOrder): GPSTATUS; stdcall;

funktioniert einwandfrei unter 32Bit aber nicht in 64Bit meine frage Warum?

Nur wenn ich diese Funktion so umschreibe dann geht es.

GdipRotateWorldTransform: function(Graphics: LONG_PTR; angle: Single; order: LongInt): GPSTATUS; stdcall;

und dann so übergebe

GdipRotateWorldTransform(graphics, ObjItem.angle + 180, Longint(MatrixOrderAppend)); Probleme über Probleme..

gruss
  Mit Zitat antworten Zitat
mkinzler
(Moderator)

Registriert seit: 9. Dez 2005
Ort: Heilbronn
39.851 Beiträge
 
Delphi 11 Alexandria
 
#2

AW: Records funktionieren nicht unter 64Bit

  Alt 23. Aug 2018, 18:08
Müsste es nicht
 GpMatrixOrder = ^TMatrixOrder; heissen?
Markus Kinzler
  Mit Zitat antworten Zitat
Benutzerbild von KodeZwerg
KodeZwerg

Registriert seit: 1. Feb 2018
3.685 Beiträge
 
Delphi 11 Alexandria
 
#3

AW: Records funktionieren nicht unter 64Bit

  Alt 23. Aug 2018, 18:10
Konvertieren_von_32-Bit-Delphi-Anwendungen_in_64-Bit-Windows

Ich vermute die Zeiger-Größe passt nicht.
Gruß vom KodeZwerg
  Mit Zitat antworten Zitat
EWeiss
(Gast)

n/a Beiträge
 
#4

AW: Records funktionieren nicht unter 64Bit

  Alt 23. Aug 2018, 18:12
Müsste es nicht
 GpMatrixOrder = ^TMatrixOrder; heissen?
Es ist der selbe Rekord aus der originalen GDIP_API.
Und mit 32Bit funktioniert es ja.
Zitat:
Ich vermute die Zeiger-Größe passt nicht.
Ich versuche es mal Danke.

gruss
  Mit Zitat antworten Zitat
EWeiss
(Gast)

n/a Beiträge
 
#5

AW: Records funktionieren nicht unter 64Bit

  Alt 23. Aug 2018, 18:20
Delphi-Quellcode:
{$ALIGN 4}
  MatrixOrder = (
    MatrixOrderPrepend,
    MatrixOrderAppend
  );
  TMatrixOrder = MatrixOrder;
  GpMatrixOrder = TMatrixOrder;
{$ALIGN ON}
Funktioniert nicht weder mit 4 ist glaube ich Standard noch mit 8

gruss
  Mit Zitat antworten Zitat
Benutzerbild von Zacherl
Zacherl

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

AW: Records funktionieren nicht unter 64Bit

  Alt 23. Aug 2018, 18:29
Versuch mal {$Z4} statt Align. Das sollte man eigentlich eh immer verwenden, wenn man C-APIs aufruft, da die Enums in C standardmäßig Integer-Sized sind.
Projekte:
- GitHub (Profil, zyantific)
- zYan Disassembler Engine ( Zydis Online, Zydis GitHub)
  Mit Zitat antworten Zitat
EWeiss
(Gast)

n/a Beiträge
 
#7

AW: Records funktionieren nicht unter 64Bit

  Alt 23. Aug 2018, 18:32
Versuch mal {$Z4} statt Align. Das sollte man eigentlich eh immer verwenden, wenn man C-APIs aufruft, da die Enums in C standardmäßig Integer-Sized sind.
Also global?
Gibt es dann keine Problem wenn ich die DLL dann mit 32Bit kompiliere?
Oder muss ich gegenprüfen.

gruss
  Mit Zitat antworten Zitat
Benutzerbild von jaenicke
jaenicke

Registriert seit: 10. Jun 2003
Ort: Berlin
9.288 Beiträge
 
Delphi 11 Alexandria
 
#8

AW: Records funktionieren nicht unter 64Bit

  Alt 23. Aug 2018, 18:33
Es ist der selbe Rekord aus der originalen GDIP_API.
Ich finde da keinen Record und deshalb wirkt auch Align nicht, das nur die Ausrichtung der Felder eines Records steuert. Ich sehe dort nur eine Enumeration. Dafür gibt es eine eigene Mindestgröße.
http://docwiki.embarcadero.com/RADSt...Typen_(Delphi)
Sebastian Jänicke
Alle eigenen Projekte sind eingestellt, ebenso meine Homepage, Downloadlinks usw. im Forum bleiben aktiv!
  Mit Zitat antworten Zitat
Benutzerbild von Zacherl
Zacherl

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

AW: Records funktionieren nicht unter 64Bit

  Alt 23. Aug 2018, 18:34
Versuch mal {$Z4} statt Align. Das sollte man eigentlich eh immer verwenden, wenn man C-APIs aufruft, da die Enums in C standardmäßig Integer-Sized sind.
Also global?
Gibt es dann keine Problem wenn ich die DLL dann mit 32Bit kompiliere?
Oder muss ich gegenprüfen.

gruss
Kannst du auch nur vor dem Enum setzen und danach wieder auf {$Z1} resetten (ist der Standard, wenn man nichts umgestellt hat). Sollte sowohl unter 32-, als auch 64-Bit funktionieren.
Projekte:
- GitHub (Profil, zyantific)
- zYan Disassembler Engine ( Zydis Online, Zydis GitHub)
  Mit Zitat antworten Zitat
EWeiss
(Gast)

n/a Beiträge
 
#10

AW: Records funktionieren nicht unter 64Bit

  Alt 23. Aug 2018, 18:40
Versuch mal {$Z4} statt Align. Das sollte man eigentlich eh immer verwenden, wenn man C-APIs aufruft, da die Enums in C standardmäßig Integer-Sized sind.
Also global?
Gibt es dann keine Problem wenn ich die DLL dann mit 32Bit kompiliere?
Oder muss ich gegenprüfen.

gruss
Kannst du auch nur vor dem Enum setzen und danach wieder auf {$Z1} resetten (ist der Standard, wenn man nichts umgestellt hat). Sollte sowohl unter 32-, als auch 64-Bit funktionieren.
Danke
Funktioniert jetzt Einwandfrei.
Zitat:
Ich sehe dort nur eine Enumeration.
Ja du hast natürlich recht hatte wohl was an der Waffel.. bei dem ganzen hin und her bis die Lib mal steht.
Aber geht ja jetzt

gruss

Geändert von EWeiss (23. Aug 2018 um 20:10 Uhr)
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 1 von 2  1 2   

Themen-Optionen Thema durchsuchen
Thema durchsuchen:

Erweiterte Suche
Ansicht

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 05:46 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