Delphi-PRAXiS
Seite 1 von 2  1 2      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Object-Pascal / Delphi-Language (https://www.delphipraxis.net/32-object-pascal-delphi-language/)
-   -   Delphi Tatsächliche und formale Variablen? (Funktion) (https://www.delphipraxis.net/84497-tatsaechliche-und-formale-variablen-funktion.html)

zecke 17. Jan 2007 16:16


Tatsächliche und formale Variablen? (Funktion)
 
:hi:

Habe schon im Forum etwas dazu gesehen, aber trotzdem konnte ich mein (vermutlich :wall:-Problem) nicht lösen..

Habe folgende Funktion:

Delphi-Quellcode:
function BlaBla(var i: integer; var CtrlName: String) : String;
begin
Showmessage(CtrlName+IntToStr(i));
end;
und aufrufen hiermit:

Delphi-Quellcode:
BlaBla(1,'Edit');
Bekomme in der Zeile des Aufrufes folgende Meldung:

Zitat:

E2033 Die Typen der tatsächlichen und formalen Var-Parameter müssen übereinstimmen
Wo stimmt denn hier etwas nicht überein? Ich stehe auffem Schlauch :oops:

Danke im voraus ;)

Christian Seehase 17. Jan 2007 16:17

Re: Tatsächliche und formale Variablen? (Funktion)
 
Moin Zecke,

'Edit' ist ein Konstante (Stringliteral) und kann somit nicht als var-Parameter übergeben werden.

mkinzler 17. Jan 2007 16:19

Re: Tatsächliche und formale Variablen? (Funktion)
 
Deshalb muß es

Delphi-Quellcode:
var
  par1: Integer;
  par2: string;
...
  par1 := 1;
  par2 := 'Edit';
  BlaBla(par1,par2);
o.ä. heißen.

zecke 17. Jan 2007 16:22

Re: Tatsächliche und formale Variablen? (Funktion)
 
Ah danke :thumb:

mkinzlers Beitrag bringt mich zu Seehases Beitrag :D Problem gelöst :)

sirius 17. Jan 2007 16:23

Re: Tatsächliche und formale Variablen? (Funktion)
 
Wenn du "var" in den deklarationsteil der Funktion übergibts, willd er Compiler die werte zurückgeben. Dementsprechend müssen beim Aufruf auch Variablen vorhanden sein.
du kannst in deinem Fall auch erst einmal das "var" weglassen.

Rynardald 10. Okt 2014 16:29

AW: Tatsächliche und formale Variablen? (Funktion)
 
Hallo,
habe ein ähnliches Problem.
Immer wenn ich versuche eine Bibliothek zu kompilieren bekomme ich den Fehler:
Code:
E2033 Die Typen der tatsächlichen und formalen Var-Parameter müssen übereinstimmen
Der Quellcode dazu sieht so aus:
Delphi-Quellcode:
 
  procedure TFilterGraph.HandleEvents;
  var
    hr: HRESULT;
    Event: Integer;
    {$IF CompilerVersion >= 24.0}
    Param1, Param2: LongInt;//NativeInt;
    {$ELSE}
    Param1, Param2: Integer;
    {$IFEND}begin
    if assigned(FMediaEventEx) then
    begin
      hr := FMediaEventEx.GetEvent(Event, Param1, Param2, 0); // an dieser Stelle
      while (hr = S_OK) do
      begin
        DoEvent(Event, Param1, Param2);
        FMediaEventEx.FreeEventParams(Event, Param1, Param2);
        hr := FMediaEventEx.GetEvent(Event, Param1, Param2, 0); // und hier auch nochmal
      end;
    end;
  end;
Die entsprechende Funktion sieht aber so aus:
Delphi-Quellcode:
function GetEvent(out lEventCode: Longint; out lParam1, lParam2: Longint;
        msTimeout: DWORD): HResult; stdcall;
Kann mir da einer von euch weiterhelfen?

mkinzler 10. Okt 2014 16:42

AW: Tatsächliche und formale Variablen? (Funktion)
 
Die Konstante 0 ist keine Variable, welche man als out Parameter übergeben könnte.

himitsu 10. Okt 2014 16:43

AW: Tatsächliche und formale Variablen? (Funktion)
 
@Markus: msTimeout ist auch kein OUT-Parameter. :zwinker:


Integer ist in 32-Bit-Anwendungen ein Alias für den LongInt.
In 64-Bit-Anwendungen wäre es ein Alias für Int64, aber da man den Integer-, INT-Typen eingefroren hat, bleibt er in Zukunft weiterhin LongInt.

Also eigentlich sollte es passen, egal ob als Integer oder LongInt deklariert.
PS: Der EventCode ist auch ein Ausgabe-Parameter. (nur als Tipp, weil ich nur bei den Params den COmpilerschalter seh)

Welche Delphi-Version nutzt du denn?

Was genau wird denn bemängelt? (wo steht den der Cursor)


Könnte es in DoEvent zu einer Exception kommen?
Wenn ja, dann gehört das FreeEventParams wohl besser in ein Try-Finally.

Rynardald 13. Okt 2014 08:16

AW: Tatsächliche und formale Variablen? (Funktion)
 
ich hab jetzt den Eventcode auch in die Compileranweisung mit reingenommen - hat sich aber nichts geändert.

Ich benutze die XE3 und der Cursor steht direkt hinter "Param1".

Ob es in der DoEvent zu einer Exception kommt kann ich nicht sagen - aber da ich das ganze gar nicht kompiliert, kann es ja nicht die Fehlerquelle sein, oder?

Rynardald 13. Okt 2014 08:48

AW: Tatsächliche und formale Variablen? (Funktion)
 
hab zwar keine Ahnung wieso, aber durch den Wechsel von Longint zu NativeInt in der Deklaration von Param1 und Param2 hat sich der Fehler behoben.


Alle Zeitangaben in WEZ +1. Es ist jetzt 15:51 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