![]() |
Frage zu MAC Adresse auslesen
Hi DPler,
ich habe ![]() Jedoch steht da jetzt immer nur eine Zahl in der Caption von meiner Form. Weis jemand warum? Der Codeausschnitt ist aus der FormCreate Methode!
Delphi-Quellcode:
[...]
SL := TStringList.Create; for I := 0 to 5 do begin SL.Add(String(uGetMACAddress.getSystemMACAddresses[I])); Caption := SL.Text[I]; end; end; |
Re: Frage zu MAC Adresse auslesen
Zitat:
Delphi-Quellcode:
Gibt den gesamten Inhalt einer Stringliste zurück ('zeile1'#13#10'zeile2'#13#10'zeile3'#13#10)
SL.Text
mit
Delphi-Quellcode:
bekommst du also nur das Zeischen Nummer i aus diesem String.
SL.Text[i]
|
Re: Frage zu MAC Adresse auslesen
Die MAC-Adresse ist ja auch eine Zahl. Nur ist eine Zahl wie 12343238 sehr schlecht lesbar, deshalb wird sie (für IP-V4) für die Eingabe/Anzeige in die Bytewerte aufgeteilt und mit : getrennt
|
Re: Frage zu MAC Adresse auslesen
Hi,
danke. Haette ich das ganze so gemacht
Delphi-Quellcode:
ist die ganze Caption leer! Oder hab ich jetzt was uebersehen?
Caption := SL.Text;
|
Re: Frage zu MAC Adresse auslesen
hast du dir mal im Debugger den Wert von sl.text anzeigen lassen? Oder hast du anstelle das in die Caption zu schreiben mal per showmessage ausgegeben?
Wenn du folgenden String einer Caption zuweist siehst du nichts mehr davon: 'Zeile1'#13#10'Zeile2'#13#10'Zeile3'#13#10'Zeile4' #13#10'Zeile5'#13#10 In der Caption wird daraus (X=nicht darstellbares zeichen): Zeile1XXZeile2XXZeile3XXZeile4XXZeile5XX durch die Zeilenumbrüche (die nicht dargestellt werden) rutscht die Caption nach oben (also aus der Titelleiste raus) so das du davon nichts mehr siehst. Nutze einfach den Debugger etwas dann siehst du die richtigen Werte. |
Re: Frage zu MAC Adresse auslesen
Hi,
ich habe grad in der Zeit als du wohl schriebst den Debugger in der Tat verwendet und ich habe nach dem gesamten Durchlauf 3 vollstaendige MAC Adressen drin gehabt in Caption. Das verstehe ich jetzt nicht wirklich. Ich habe doch nur einen Onboard LAN Adapter drin. Wenn ich aber mit der ShowMessage arbeite bekomme ich eine MAC angezeigt, dann 6 MAC's untereinander geschrieben in der ShowMessage. Weis wer wo die anderen herkommen? |
Re: Frage zu MAC Adresse auslesen
liefert dir denn GetSystemMacAdresses wirklich 6 Adressen zurück oder liegt es vielleicht einfach nur daran das du deine schleife hart von 0 bis 5 durchlaufen lässt?
Im übrigen hast du dir da ein riesen Speicherleck geschaffen. Durch den Aufruf von GetSystemMacAdresses wird eine Stringlist initialisiert welche dir zurück gegeben wird. Diese gibst du allerdings nirgends frei sondern rufst stattdessen die Funktion sogar 6 mal auf ohne einmal die zurückgegebene Stringlist frei zu geben. Eben um so etwas zu vermeiden werden funktionen die Listen füllen in der Regel so declariert.
Delphi-Quellcode:
somit ist der Nutzer gezwungen die Liste(das Object) vorher anzulegen und weiß damit auch sofort das er sich um die Freigabe auch selbst kümmern muss. Es hindert dich niemand dran als Ergebnis die Stringliste auch als Funktionsergebnis zurück zu geben aber du solltest in einer Funktion keine Stringliste erstellen und zurückgeben.
function GetSystemMacAdresses(ADestList: TStringList): Irgendwas;
Delphi-Quellcode:
Generell sollte man in Funktionen nie ein Object erstellen welches per Result zurück gegeben wird.
function GetSystemMacAdresses(ADestList: TStringList): TStringList;
begin [...] result := ADestList; end; Denn der Endanwender weiß dann nicht ob er sich selbst um die Freigabe kümmern muss oder ob die Freigabe von der Klasse gemanged wird. Zudem kommt es auch des öfteren vor das man eine Funktion aufruft ohne das Funktionsergebnis zu verwenden (denn nicht alle werten Funktionsergebnisse aus um heraus zu finden ob der Aufruf erfolgreich war etc.). |
Re: Frage zu MAC Adresse auslesen
Zitat:
Zitat:
::Edit:: Und wie kann ich das sonst noch machen ausser mit einer for Schleife da ich ja wie gesagt nur eine MAC Adresse haben kann in meinem PC! Also am Besten das ganze Dynamisch falls mal ein PC da steht mit mehr als einer NIC! |
Re: Frage zu MAC Adresse auslesen
Vielleicht geht es so besser?
Delphi-Quellcode:
Aber das Speicherleck hast Du dann noch immer.
[...]
begin SL := TStringList.Create; SL.Assign(uGetMACAddress.getSystemMACAddresses); for i:=0 to Sl.count -1 do // Ausgabe mac Addresses SL.free; end; Grüße Klaus |
Re: Frage zu MAC Adresse auslesen
Danke Klaus.
Hier auch wieder. 6 mal ne ShowMessage mit insgesamt 6 MACs! |
Alle Zeitangaben in WEZ +1. Es ist jetzt 02:07 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