Delphi-PRAXiS
Seite 1 von 2  1 2      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Win32/Win64 API (native code) (https://www.delphipraxis.net/17-win32-win64-api-native-code/)
-   -   Delphi Typenfehler bei Wechsel von D7->XE10.1 (https://www.delphipraxis.net/191684-typenfehler-bei-wechsel-von-d7-xe10-1-a.html)

Captnemo 10. Feb 2017 11:13

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;

Delphi-Laie 10. Feb 2017 11:21

AW: Typenfehler bei Wechsel von D7->XE10.1
 
Zitat:

Zitat von Captnemo (Beitrag 1361253)
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.

Richtig und falsch sind eben relativ (zur Delphi-Version). Viel interessanter als "nicht erklärbarer" wäre gewesen, welcher Fehler konkret auftritt.

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.

Uwe Raabe 10. Feb 2017 11:31

AW: Typenfehler bei Wechsel von D7->XE10.1
 
So sollte es gehen:

Delphi-Quellcode:
var
  hToken: THandle;

Lemmy 10. Feb 2017 11:32

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....

Whookie 10. Feb 2017 11:33

AW: Typenfehler bei Wechsel von D7->XE10.1
 
aus Windows.pas

Delphi-Quellcode:
function OpenProcessToken(ProcessHandle: THandle; DesiredAccess: DWORD;
  var TokenHandle: THandle): BOOL; stdcall;

Uwe Raabe 10. Feb 2017 11:42

AW: Typenfehler bei Wechsel von D7->XE10.1
 
Zitat:

Zitat von Lemmy (Beitrag 1361256)
nein, passt nicht - einfach mal die Signatur der Prozedur in Delphi anschauen - das muss ein NativeUInt sein....

Das deutet jetzt auf die übliche Diskrepanz zwischen Theorie und Praxis hin :) Nicht alles, was der Hint anzeigt steht auch wirklich so da.

Whookie 10. Feb 2017 12:10

AW: Typenfehler bei Wechsel von D7->XE10.1
 
Zitat:

Zitat von Uwe Raabe (Beitrag 1361259)
... :) Nicht alles, was der Hint anzeigt steht auch wirklich so da.

Ja so ist das.. auf nichts ist mehr Verlass ;)

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.)!

Captnemo 10. Feb 2017 13:04

AW: Typenfehler bei Wechsel von D7->XE10.1
 
THandle....das war's. Wer lesen kann, ist klar im Vorteil. Danke an alle.

Lemmy 10. Feb 2017 13:18

AW: Typenfehler bei Wechsel von D7->XE10.1
 
Zitat:

Zitat von Uwe Raabe (Beitrag 1361259)
Zitat:

Zitat von Lemmy (Beitrag 1361256)
nein, passt nicht - einfach mal die Signatur der Prozedur in Delphi anschauen - das muss ein NativeUInt sein....

Das deutet jetzt auf die übliche Diskrepanz zwischen Theorie und Praxis hin :) Nicht alles, was der Hint anzeigt steht auch wirklich so da.

das ist sicherlich richtig - wobei ich zu meiner Verteidigung anbringen möchte, dass sich das "nein, passt nicht" auf das "Meiner Meinung nach sollte doch das hier soweit korrekt sein, oder sehe ich das falsch?" im Ausgangspost bezog und nicht auf deinen Post, der sich irgendwie ohne Meldung dazwischen geschmuggelt hat :-)

himitsu 10. Feb 2017 18:59

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:


Alle Zeitangaben in WEZ +1. Es ist jetzt 17:34 Uhr.
Seite 1 von 2  1 2      

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