![]() |
Typenfehler bei Wechsel von D7->XE10.1
Ich habe eine ältere Anwendung, die bisher noch unter D7 gepflegt wurde. Diese soll jetzt auf 10.1 compiliert werden.
Dabei tritt eine "für mich" nicht erklärbarer Fehler auf. Meiner Meinung nach sollte doch das hier soweit korrekt sein, oder sehe ich das falsch?
Delphi-Quellcode:
procedure ShutDown;
var hToken: Cardinal; begin if OpenProcessToken(GetCurrentProcess, TOKEN_ADJUST_PRIVILEGES or TOKEN_QUERY, hToken) then begin // <--- [dcc32 Fehler] Main.pas(6268): E2033 Die Typen der tatsächlichen und formalen Var-Parameter müssen übereinstimmen . . end; |
AW: Typenfehler bei Wechsel von D7->XE10.1
Zitat:
Edit: OK, da steht er ja. Wurden wohl andere Typen im neuen Delphi für diese Funktion deklariert...Muß wahrscheinlich ein anderer Integertyp deklariert werden, auf Anhieb weiß ich jetzt nicht, wie der heißt. Schau mal in meinen "Prozeßbetrachter", da funktioniert es. Edit2: Mist, andere waren schneller. NativeUInt fiel mir auch gerade ein. |
AW: Typenfehler bei Wechsel von D7->XE10.1
So sollte es gehen:
Delphi-Quellcode:
var
hToken: THandle; |
AW: Typenfehler bei Wechsel von D7->XE10.1
nein, passt nicht - einfach mal die Signatur der Prozedur in Delphi anschauen - das muss ein NativeUInt sein....
|
AW: Typenfehler bei Wechsel von D7->XE10.1
aus Windows.pas
Delphi-Quellcode:
function OpenProcessToken(ProcessHandle: THandle; DesiredAccess: DWORD;
var TokenHandle: THandle): BOOL; stdcall; |
AW: Typenfehler bei Wechsel von D7->XE10.1
Zitat:
|
AW: Typenfehler bei Wechsel von D7->XE10.1
Zitat:
Grundsätzlich war Cardinal ja mal richtig für THandle und solange das Programm nur für 32 Bit compiliert wird sollte es auch kein Problem geben... ABER (ja da ist immer ein "aber") sobald man das ganze für 64bit compilieren möchte wird es böse! Daher kann ich nur empfehlen, immer in der windows.pas nachzusehen welche Parametertypen verwendet werden und diese auch unbedingt einzusetzen (das gilt insbesondere für HRESULT, LPARAM, WPARAM, LRESULT, THandle, usw.)! |
AW: Typenfehler bei Wechsel von D7->XE10.1
THandle....das war's. Wer lesen kann, ist klar im Vorteil. Danke an alle.
|
AW: Typenfehler bei Wechsel von D7->XE10.1
Zitat:
|
AW: Typenfehler bei Wechsel von D7->XE10.1
Auch wenn THandle früher mal Cardinal war ...
Tja, hätte man damals den "richtigen" Typen (THandle) verwendet, hätte die Umstellung keine Probleme bereitet. Das Selbe wie bei Unicode, hätte man die richtigen Typen genommen, wären über 95% der Codes ohne große Änderungen auch sofort in D2009+ gelaufen. :roll: |
AW: Typenfehler bei Wechsel von D7->XE10.1
Hätte...wäre...Dabei hat Delphi doch schon den Wechsel von 16 auf 32 Bit miterlebt. Damals sollten "mitwachsende" (generische?) Typen (integer, cardinal, string ohnehin) doch schon die "ultimative Zukunftssicherheit" gewährleisten. Und in der Tat waren und sind Turbo-Pascal und Delphi vorbildlich abwärtskompatibel, leider aber nicht vollständig.
|
AW: Typenfehler bei Wechsel von D7->XE10.1
Zitat:
Vielleicht liegt das aber auch gar nicht zwingend an Delphi. Die Ursache dafür hab ich noch nicht gefunden. Bei neuen Projekten passiert das jedenfalls nicht. |
AW: Typenfehler bei Wechsel von D7->XE10.1
Früher hatte Delphi Width/Height der Forms gespeichert, was schief gehen musste, wenn sich die Größe der Ränder ändert.
Inzwischen wird ClientWidth/ClientHeight gespeichert. Problem ist dennoch, wenn der Desktop kleiner ist, als das Fenster zur Entwicklungszeit, denn der VCL-Loader läd erstmal alles blind und ignoriert, wenn Windows die Fenster/Komponenten dabei verkleinert oder verschiebt. Align und Co. wird dann aber auf die falschen Fenster-/Komponentengrößen und Positionen angewendet, womit selbst mit automatischer Ausrichtung etwas außerhalb der Form liegen bleibt. Da kann man nur alles in ein Panel legel und das beim Start selber ausrichten. Und alles, was rechts und/oder unten ausgerichtet wird, müsste man auch noch neu ausrichten, wenn dessen Größe falsch geladen wird. |
AW: Typenfehler bei Wechsel von D7->XE10.1
Zitat:
|
AW: Typenfehler bei Wechsel von D7->XE10.1
Okay, danke für die Tipps. Ein Deaktivieren der Hochauflösung hat erst mal alles wieder auf "Normalzustand" gebracht. Ist zwar nicht die Endlösung, aber für's erste schon mal zu gebrauchen.
Die notwendigen Änderungen lassen sich bei 240 Formen nur Stück für Stück umsetzen. |
AW: Typenfehler bei Wechsel von D7->XE10.1
Zitat:
|
Alle Zeitangaben in WEZ +1. Es ist jetzt 13:33 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz