Delphi-PRAXiS
Seite 1 von 2  1 2   

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

EWeiss 23. Aug 2018 17:04

Records funktionieren nicht unter 64Bit
 
Delphi-Quellcode:
  MatrixOrder = (
    MatrixOrderPrepend,
    MatrixOrderAppend
  );
  TMatrixOrder = MatrixOrder;
  GpMatrixOrder = TMatrixOrder;
Delphi-Quellcode:
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.

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


und dann so übergebe

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

gruss

mkinzler 23. Aug 2018 17:08

AW: Records funktionieren nicht unter 64Bit
 
Müsste es nicht
Delphi-Quellcode:
 GpMatrixOrder = ^TMatrixOrder;
heissen?

KodeZwerg 23. Aug 2018 17:10

AW: Records funktionieren nicht unter 64Bit
 
Konvertieren_von_32-Bit-Delphi-Anwendungen_in_64-Bit-Windows

Ich vermute die Zeiger-Größe passt nicht.

EWeiss 23. Aug 2018 17:12

AW: Records funktionieren nicht unter 64Bit
 
Zitat:

Zitat von mkinzler (Beitrag 1411433)
Müsste es nicht
Delphi-Quellcode:
 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

EWeiss 23. Aug 2018 17:20

AW: Records funktionieren nicht unter 64Bit
 
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

Zacherl 23. Aug 2018 17:29

AW: Records funktionieren nicht unter 64Bit
 
Versuch mal
Delphi-Quellcode:
{$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.

EWeiss 23. Aug 2018 17:32

AW: Records funktionieren nicht unter 64Bit
 
Zitat:

Zitat von Zacherl (Beitrag 1411440)
Versuch mal
Delphi-Quellcode:
{$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

jaenicke 23. Aug 2018 17:33

AW: Records funktionieren nicht unter 64Bit
 
Zitat:

Zitat von EWeiss (Beitrag 1411436)
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)

Zacherl 23. Aug 2018 17:34

AW: Records funktionieren nicht unter 64Bit
 
Zitat:

Zitat von EWeiss (Beitrag 1411442)
Zitat:

Zitat von Zacherl (Beitrag 1411440)
Versuch mal
Delphi-Quellcode:
{$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
Delphi-Quellcode:
{$Z1}
resetten (ist der Standard, wenn man nichts umgestellt hat). Sollte sowohl unter 32-, als auch 64-Bit funktionieren.

EWeiss 23. Aug 2018 17:40

AW: Records funktionieren nicht unter 64Bit
 
Zitat:

Zitat von Zacherl (Beitrag 1411444)
Zitat:

Zitat von EWeiss (Beitrag 1411442)
Zitat:

Zitat von Zacherl (Beitrag 1411440)
Versuch mal
Delphi-Quellcode:
{$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
Delphi-Quellcode:
{$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


Alle Zeitangaben in WEZ +1. Es ist jetzt 23:14 Uhr.
Seite 1 von 2  1 2   

Powered by vBulletin® Copyright ©2000 - 2019, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2019 by Daniel R. Wolf