![]() |
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:
und aufrufen hiermit:
function BlaBla(var i: integer; var CtrlName: String) : String;
begin Showmessage(CtrlName+IntToStr(i)); end;
Delphi-Quellcode:
Bekomme in der Zeile des Aufrufes folgende Meldung:
BlaBla(1,'Edit');
Zitat:
Danke im voraus ;) |
Re: Tatsächliche und formale Variablen? (Funktion)
Moin Zecke,
'Edit' ist ein Konstante (Stringliteral) und kann somit nicht als var-Parameter übergeben werden. |
Re: Tatsächliche und formale Variablen? (Funktion)
Deshalb muß es
Delphi-Quellcode:
o.ä. heißen.
var
par1: Integer; par2: string; ... par1 := 1; par2 := 'Edit'; BlaBla(par1,par2); |
Re: Tatsächliche und formale Variablen? (Funktion)
Ah danke :thumb:
mkinzlers Beitrag bringt mich zu Seehases Beitrag :D Problem gelöst :) |
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. |
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:
Der Quellcode dazu sieht so aus:
E2033 Die Typen der tatsächlichen und formalen Var-Parameter müssen übereinstimmen
Delphi-Quellcode:
Die entsprechende Funktion sieht aber so aus: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;
Delphi-Quellcode:
Kann mir da einer von euch weiterhelfen?
function GetEvent(out lEventCode: Longint; out lParam1, lParam2: Longint;
msTimeout: DWORD): HResult; stdcall; |
AW: Tatsächliche und formale Variablen? (Funktion)
Die Konstante 0 ist keine Variable, welche man als out Parameter übergeben könnte.
|
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. |
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? |
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 04:08 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