Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Netzwerke (https://www.delphipraxis.net/14-netzwerke/)
-   -   Delphi Gleiche Funktionen->anderes Ergebnis (macadressen...ERLEDIGT (https://www.delphipraxis.net/37856-gleiche-funktionen-anderes-ergebnis-macadressen-erledigt.html)

SirThornberry 11. Jan 2005 13:48


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:
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;
Funktion für die Macadresse
Delphi-Quellcode:
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;
[Edit]Hab die Frage vergessen :oops: Wo liegt der Fehler?[/Edit]

SirThornberry 11. Jan 2005 14:29

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