AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Programmieren allgemein E2033 Die Typen der tatsächlichen und formalen Var-Parameter müssen übereinstimmen
Thema durchsuchen
Ansicht
Themen-Optionen

E2033 Die Typen der tatsächlichen und formalen Var-Parameter müssen übereinstimmen

Ein Thema von wschrabi · begonnen am 6. Feb 2025 · letzter Beitrag vom 6. Feb 2025
Antwort Antwort
Blup

Registriert seit: 7. Aug 2008
Ort: Brandenburg
1.494 Beiträge
 
Delphi 12 Athens
 
#1

AW: E2033 Die Typen der tatsächlichen und formalen Var-Parameter müssen übereinstimme

  Alt 6. Feb 2025, 09:45
Code:
BOOL CreatePipe(
  [out]         PHANDLE              hReadPipe,
  [out]         PHANDLE              hWritePipe,
  [in, optional] LPSECURITY_ATTRIBUTES lpPipeAttributes,
  [in]          DWORD                nSize
);
Dann eher so:
Delphi-Quellcode:
  
  Result := CreatePipe(@ReadPipe, @WritePipe, @SecurityAttr, 0);
  Mit Zitat antworten Zitat
wschrabi

Registriert seit: 16. Jan 2005
456 Beiträge
 
#2

AW: E2033 Die Typen der tatsächlichen und formalen Var-Parameter müssen übereinstimme

  Alt 6. Feb 2025, 09:55
BESTEN DANK!
  Mit Zitat antworten Zitat
Benutzerbild von Uwe Raabe
Uwe Raabe

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

AW: E2033 Die Typen der tatsächlichen und formalen Var-Parameter müssen übereinstimme

  Alt 6. Feb 2025, 10:01
Also die Deklaration in Winapi.Windows sieht eher so aus:
Delphi-Quellcode:
function CreatePipe(var hReadPipe, hWritePipe: THandle;
  lpPipeAttributes: PSecurityAttributes; nSize: DWORD): BOOL; stdcall;
Das deckt sich aber mit dem ursprünglichen Aufruf. Man müsste vielleicht mal die uses-Anweisungen sehen.
Uwe Raabe
Certified Delphi Master Developer
Embarcadero MVP
Blog: The Art of Delphi Programming
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu
Online

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
44.590 Beiträge
 
Delphi 12 Athens
 
#4

AW: E2033 Die Typen der tatsächlichen und formalen Var-Parameter müssen übereinstimme

  Alt 6. Feb 2025, 10:07
Wird WinMD verwendet?

Dort haben viele APIs eine andere/inkompatible Signatur,
bzw. Einige sehen "gleich" aus, aber die Typen sind anders oder gar komplett falsch/schrott/imarsch/beschissen/totalermist/schwachsinnig/hirnrissig/........
Ein Therapeut entspricht 1024 Gigapeut.
  Mit Zitat antworten Zitat
Benutzerbild von jaenicke
jaenicke

Registriert seit: 10. Jun 2003
Ort: Berlin
10.076 Beiträge
 
Delphi 12 Athens
 
#5

AW: E2033 Die Typen der tatsächlichen und formalen Var-Parameter müssen übereinstimme

  Alt 6. Feb 2025, 10:35
Also die Deklaration in Winapi.Windows sieht eher so aus:
Das hat Embarcadero aber bei vielen Aufrufen von Pointer auf var geändert. Der Dank sieht für mich danach aus, dass es funktioniert, vermutlich mit einer älteren Delphi-Version.
Sebastian Jänicke
AppCentral
  Mit Zitat antworten Zitat
Benutzerbild von Uwe Raabe
Uwe Raabe

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

AW: E2033 Die Typen der tatsächlichen und formalen Var-Parameter müssen übereinstimme

  Alt 6. Feb 2025, 10:45
vermutlich mit einer älteren Delphi-Version.
Das wäre in der Tat eine relevante Information gewesen.
Uwe Raabe
Certified Delphi Master Developer
Embarcadero MVP
Blog: The Art of Delphi Programming
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu
Online

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
44.590 Beiträge
 
Delphi 12 Athens
 
#7

AW: E2033 Die Typen der tatsächlichen und formalen Var-Parameter müssen übereinstimme

  Alt 6. Feb 2025, 11:11
Delphi-Quellcode:
begin
  var SecurityAttr := Default(TSecurityAttributes); // inkl. sowas wie FillChar mit 0
  SecurityAttr.nLength := SizeOf(TSecurityAttributes);
  SecurityAttr.bInheritHandle := True;
  //SecurityAttr.lpSecurityDescriptor := nil; // 0 bleibt ja 0
  Result := CreatePipe(ReadPipe, WritePipe, @SecurityAttr, 0);
end;
Delphi-Quellcode:
var
  SecurityAttr: TSecurityAttributes;
begin
  SecurityAttr := Default(TSecurityAttributes); // inkl. sowas wie FillChar mit 0
  ...



Der Unterschied kann auch beim SecurityAttr sein, wie z.B. typloser Zeiger, typisierter Zeiger oder Const/Var/...
Also einfach mal die Deklaration von "deinem" verwendeten CreatePipe suchen und die Signatur (Typen der Parameter) ansehn,
sowie bei dir und der Deklaration prüfen, ob sie auf die "selben" Typ-Deklarationen der Parameter verweisen.

Also die Deklaration in Winapi.Windows sieht eher so aus:
Das ist auch der Grund, warum z.B. zusammen mit Embas WinMD es gern raucht, da sich gern das mit Pointer vs. Const/Var unterscheidet. (für Pflichparameter, finde ich die Variante mit Const/Var handlicher)
Teilweise ist es im WinMD auch besser, weil Delphi teilweise hart CONST/VAR nutzt, auch für optionale Parameter, welche durch sowas zur Pflicht werden (außer man castet böse mit NIL um sich)
Ein Therapeut entspricht 1024 Gigapeut.

Geändert von himitsu ( 6. Feb 2025 um 11:27 Uhr)
  Mit Zitat antworten Zitat
Antwort Antwort

 

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 16:27 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