Autor Beitrag
benedikt124
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 27



BeitragVerfasst: Mo 24.11.08 18:08 
Hallo,

ich habe eine Funktion mit einer Indy-Komponente:

ausblenden Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
21:
22:
23:
24:
25:
26:
27:
28:
29:
function console(const befehl, pw, port, ip: Stringout antwort: String): Boolean; 

    var pb_senden, strTemp, Daten, strTemp2, pb_str: String
        IdUDPClient3: TIdUDPClient; 
        e_stop_re_pb: Boolean; 

begin 
    pb_senden := 'pw '+pw+' '+befehl+''+#$00
    IdUDPClient3.Host := ip; 
    IdUDPClient3.Port := strtoint(port); 
    IdUDPClient3.Active := true; 
  try 
    IdUDPClient3.Send(pb_senden); 
    strTemp := IdUDPClient3.ReceiveString(160); 
    pb_str := StringReplace(strTemp,'ÿÿÿÿprint','Antwort des Servers:',[rfReplaceAll, rfIgnoreCase]); 
    Daten := StringReplace(pb_str,'^1439','' + #13#10 + '',[rfReplaceAll, rfIgnoreCase]); 
    antwort := Daten; 
    IdUDPClient3.Active := false; 
    Result := True; 
  except 
    on E: EIdException do begin 
     e_stop_re_pb := True; 
     IdUDPClient3.Active := false; 
     Result := False; 
    end

  end

end;


Beim Ausführen kommt aber immer:

ausblenden Quelltext
1:
Zugriffsverletzung bei Adresse 00404038					


Aber warum?

mfg

Bene
bummi
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 1248
Erhaltene Danke: 187

XP - Server 2008R2
D2 - Delphi XE
BeitragVerfasst: Mo 24.11.08 18:12 
Du hast IdUDPClient3 nirgendwo erzeugt....
benedikt124 Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 27



BeitragVerfasst: Mo 24.11.08 18:34 
Hallo
ausblenden Delphi-Quelltext
1:
var IdUDPClient3: TIdUDPClient;					


oder was meinst du jetzt?
bummi
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 1248
Erhaltene Danke: 187

XP - Server 2008R2
D2 - Delphi XE
BeitragVerfasst: Mo 24.11.08 18:40 
IdUDPClient3:=TIdUDPClient.Create(self);
....
....
....
IdUDPClient3.Free;

oder eine Statische Komponente auf Deinem Form/Datenmodul
benedikt124 Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 27



BeitragVerfasst: Mo 24.11.08 18:50 
Ahso okey,

auf dem Form habe ich die Komponente drin, es kommt der Fehler immer noch.

Wenn ich es mit
IdUDPClient3:=TIdUDPClient.Create(self);

bekomme ich jedoch den Fehler

Undefinierter Bezichner: self ...

Moderiert von user profile iconmatze: Delphi-Tags hinzugefügt
bummi
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 1248
Erhaltene Danke: 187

XP - Server 2008R2
D2 - Delphi XE
BeitragVerfasst: Mo 24.11.08 19:02 
ok, sorry ich hatte nicht gesehen daß Du eine "Nichtklassenmethode" verwendest.

Du könntest
IdUDPClient3:=TIdUDPClient.Create(nil);
verwenden
oder IdUDPClient3 als Parameter Deiner Funktion mitgeben
oder function Form1.console(const befehl, pw, port,....
aus Deiner Funtion machen.

Das Problem ist daß Du in Deinem Beispiel auf eine Variable zugreift hinter der nicht steht.

Moderiert von user profile iconmatze: Delphi-Tags hinzugefügt
benedikt124 Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 27



BeitragVerfasst: Mo 24.11.08 19:54 
Hmm ich habe jetzt

Frame9.console(const befehl, pw, port,....

ausprobiert, geht aber immer noch nicht :oops: :oops:
DeddyH
Ehemaliges Mitglied
Erhaltene Danke: 1



BeitragVerfasst: Mo 24.11.08 21:00 
Dann mach doch aus der Funktion eine Methode und lass die Variablendeklaration des UDPClients weg.
benedikt124 Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 27



BeitragVerfasst: Di 25.11.08 17:52 
Aber Moment,

wenn ich aus der Funktion eine Methode mache, dann bekomme ich doch kein Ergebnis zurück also zum Beispiel die
Antwort des Servers in einem String....

Oder bin ich da jetzt komplett falsch? :lol: :lol:
DeddyH
Ehemaliges Mitglied
Erhaltene Danke: 1



BeitragVerfasst: Di 25.11.08 17:54 
Der Unterschied zwischen regulärer Funktion und Methode ist Dir geläufig?
benedikt124 Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 27



BeitragVerfasst: Di 25.11.08 18:52 
Nicht wirklich ,
ich glaube ich missverstehe da gerade was ganz arg..
DeddyH
Ehemaliges Mitglied
Erhaltene Danke: 1



BeitragVerfasst: Di 25.11.08 20:16 
Reguläre Funktion:
ausblenden Delphi-Quelltext
1:
function TuWas: integer;					

Methode von FrmMain:
ausblenden Delphi-Quelltext
1:
function TFrmMain.TuWas: integer;					

Ich hoffe, das ist nun klarer ;)
benedikt124 Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 27



BeitragVerfasst: Mi 26.11.08 08:16 
Achsooo,

also in meinem Fall geht das auch so oder:
ausblenden Delphi-Quelltext
1:
function TFrame9.console(...					


hier kommt aber auch der Fehler... :oops: :oops:
Mordilion
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 96

WinXP Prof., Win2k Prof.
Delphi 7 Prof., Delphi 2009 Prof., PHP4/5, CSS, HTML
BeitragVerfasst: Mi 26.11.08 08:57 
Versuch mal so:

ausblenden volle Höhe Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
21:
22:
23:
24:
25:
26:
27:
28:
29:
30:
31:
32:
33:
function console(const befehl, pw, port, ip: Stringout antwort: String): Boolean; 
var 
  pb_senden, strTemp, Daten, strTemp2, pb_str: String
  IdUDPClient3: TIdUDPClient; 
  e_stop_re_pb: Boolean; 
begin 
  pb_senden := 'pw '+pw+' '+befehl+''+#$00

  IdUDPClient3 := TIdUDPClient.Create(nil);
  try
    IdUDPClient3.Host := ip; 
    IdUDPClient3.Port := strtoint(port); 
    IdUDPClient3.Active := true; 
    try 
      IdUDPClient3.Send(pb_senden); 
      strTemp := IdUDPClient3.ReceiveString(160); 
      pb_str := StringReplace(strTemp,'ÿÿÿÿprint','Antwort des Servers:',[rfReplaceAll, rfIgnoreCase]); 
      Daten := StringReplace(pb_str,'^1439','' + #13#10 + '',[rfReplaceAll, rfIgnoreCase]); 
      antwort := Daten; 
      IdUDPClient3.Active := false; 
      Result := True; 
    except 
      on E: EIdException do 
      begin 
        e_stop_re_pb := True; 
        IdUDPClient3.Active := false; 
        Result := False; 
      end
    end
  finally
    IdUDPClient3.Free;
  end;
end;


Die Funktionist nicht von mir getestet worden!
Schau einfach mal ob der Fehler weiterhin auftritt.

Wenn es mit dieser Änderung klappen sollte, dann schau dir bitte noch ein paar Tutorials bezüglich Delphi an.



Gruß
Mordi

_________________
Für das große Chaos haben wir Computer. Die übrigen Fehler machen wir von Hand.
Der Mensch ist das wichtigste und kostbarste Peripheriegerät einer Computeranlage.
benedikt124 Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 27



BeitragVerfasst: Mi 26.11.08 14:54 
Cool es geht... :D :D :D :D

Danke @all

Zitat:

Wenn es mit dieser Änderung klappen sollte, dann schau dir bitte noch ein paar Tutorials bezüglich Delphi an.


Das werde ich machen, nochmal Danke :)