Gleiche Funktionen->anderes Ergebnis (macadressen...ERLED
ich habe 2 Funktionen. Die eine ist zum auslesen der Macadresse. Dabei kann man per Parameter angeben die wievielte Macadresse ausgelesen werden soll (falls mehrere Netzwerkkarten eingebaut sind). In der Funktion wird ob ich überhaupt 5 Netzwerkkarten habe wenn ich die 5te auslesen möchte.
Von dieser Funktion abgeleitet habe ich mir eine neue gebaut die zu 100% identich ist (nur das result der Funktion ist von einem anderen Typ) und mir die Anzahl der Netzwerkkarten zurück gibt. Diese funktion liefert mir allerdings ein falsches ergebnis (Ergebnis ist auch ab und zu mal ein anderes) Funktion zum zählen
Delphi-Quellcode:
Funktion für die Macadresse
function GetMacAddressCount: Byte;
var AdapterList: TLanaEnum; NCB: TNCB; begin FillChar(NCB, SizeOf(NCB), 0); NCB.ncb_command := Char(NCBENUM); NCB.ncb_buffer := @AdapterList; NCB.ncb_length := SizeOf(AdapterList); Netbios(@NCB); //<== Bis einschließlich dieser zeile ist die Funktion gleich der anderen result := Byte(AdapterList.length); //Ergebnis weicht von dem ab, welches in der anderen Funktion beim Debuggen angezeigt wird end;
Delphi-Quellcode:
[Edit]Hab die Frage vergessen :oops: Wo liegt der Fehler?[/Edit]
function GetMACAddress(ANewworkcardIndex: Byte = 0): string;
var AdapterList: TLanaEnum; NCB: TNCB; begin FillChar(NCB, SizeOf(NCB), 0); NCB.ncb_command := Char(NCBENUM); NCB.ncb_buffer := @AdapterList; NCB.ncb_length := SizeOf(AdapterList); Netbios(@NCB); //<== Bis einschließlich dieser zeile ist die Funktion gleich der anderen if Byte(AdapterList.length) > ANewworkcardIndex then Result := GetAdapterInfo(AdapterList.lana[ANewworkcardIndex]) else Result := 'mac not found'; end; |
Re: Gleiche Funktionen->anderes Ergebnis (macadressen zä
Hab den Fehler gefunden.
Der Rückgabewert von "NetBios" war 7 was so viel heißt wie "illegal buffer address". Trotz dessen das der Buffer verwendet wurde und laut debugger nicht weg optimiert wurde hat es nicht funktioniert. Deswegen hab ich einfach aus "TLanaEnum" ein "^TLanaEnum" gemacht und selbst mit "new" speicher dafür angefordert. Und siehe da - es funktioniert. abgeänderter Source der Funktion:
Delphi-Quellcode:
var AdapterList: ^TLanaEnum;
NCB: TNCB; begin new(AdapterList); FillChar(NCB, SizeOf(NCB), 0); NCB.ncb_command := Char(NCBENUM); NCB.ncb_buffer := PChar(AdapterList); NCB.ncb_length := SizeOf(AdapterList^); Netbios(@NCB); Result := Byte(AdapterList.length); dispose(AdapterList); end; |
Alle Zeitangaben in WEZ +1. Es ist jetzt 05:54 Uhr. |
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