MAC Adresse
-
typedef struct _ASTAT { ADAPTER_STATUS adapt; NAME_BUFFER NameBuff[30]; } ASTAT; //============================================================================= int TForm1::GetMacAddresses(TStrings* pslStrings) { int ilRetVal = 0; // Rückgabewert NCB stNetCtrlBlock; // Network Control Block - Instanz LPVOID pASTAT; // Zeiger auf die ASTAT-Struktur ASTAT stAdapterStatus; // AdapterStatus-Struktur LANA_ENUM stLanEnum; // Struktur für die Enumerierung der // Netzwerkkarten if(pslStrings != NULL) pslStrings->Clear(); // die Anzahl der Netzwerkkarten ermitteln: memset(&stNetCtrlBlock, 0, sizeof(stNetCtrlBlock)); stNetCtrlBlock.ncb_command = NCBENUM; stNetCtrlBlock.ncb_buffer = (UCHAR *)&stLanEnum; stNetCtrlBlock.ncb_length = sizeof(stLanEnum); Netbios(&stNetCtrlBlock); ilRetVal = stLanEnum.length; // Falls Zeiger auf TStrings-Instanz übergeben, MAC-Adressen // auslesen und in die Stringliste einfügen: if(pslStrings != NULL) { for(int ilAdapter=0; ilAdapter < ilRetVal; ilAdapter++) { stNetCtrlBlock.ncb_command = NCBRESET; Netbios(&stNetCtrlBlock); strcpy(stNetCtrlBlock.ncb_callname,"* "); stNetCtrlBlock.ncb_command = NCBASTAT; stNetCtrlBlock.ncb_lana_num = ilAdapter; stNetCtrlBlock.ncb_length = sizeof(stAdapterStatus); pASTAT=HeapAlloc(GetProcessHeap(),HEAP_GENERATE_EXCEPTIONS| HEAP_ZERO_MEMORY, stNetCtrlBlock.ncb_length); if(pASTAT != NULL) { stNetCtrlBlock.ncb_buffer=(UCHAR *)pASTAT; Netbios(&stNetCtrlBlock); CopyMemory(&stAdapterStatus,stNetCtrlBlock.ncb_buffer, sizeof(stAdapterStatus)); AnsiString slMacAddress; for(int i =0; i < 6; i++) { slMacAddress += IntToHex(stAdapterStatus.adapt.adapter_address[i],2); if(i<5) slMacAddress+="-"; } HeapFree(GetProcessHeap(),0,pASTAT); pslStrings->Add(slMacAddress); } else ilRetVal = 0; } } return ilRetVal; }
Ich bekomme beim typdef immer die Fehlermeldung
[C++ Fehler] Unit1.cpp(219): E2303 Typname erwartet
[C++ Fehler] Unit1.cpp(219): E2139 In Deklaration fehlt ;weiss jemand woran das liegen könnnte ??
FGGF
-
Am fehlenden Header!?
#include <nb30.h>
Siehe FAQ unter "Netzwerk".PS: Wozu das doppelte if(pslStrings != NULL)?
-
Alles klar danke Jansen.
MAC Code ist von http://www.bytesandmore.de/rad/index.htm?http://www.bytesandmore.de/rad/cpp/snipp/sc08012.php
FGGF
-
Siehst ja, was du davon hast.
SCNR
-
Jupp, das kommt schon vor. Aber leider habe ich nicht immer die Zeit und das Wissen um manche Funktionen selber programmieren zu können. Wieso sollte man auch das Rad jedesmal neu erfinden, wenn manche Funktionen schon zu Verfügung stehen.
Hab schon wieder ein kleines Problemchen. Mein MAC ADresse wird mit 00-00-00-00-00-00 ausgelesen. Warum ??FGGF
-
Keine Ahnung. Schon mal die FAQ-Variante getestet?
-
hier noch ne ähnliche variante, versuchs mal damit (bei mir funzt es)
String GetAdapterInfo(int adapter_num) { NCB Ncb; memset(&Ncb, 0, sizeof(Ncb)); Ncb.ncb_command = NCBRESET; Ncb.ncb_lana_num = adapter_num; if (Netbios(&Ncb) != NRC_GOODRET) return 0; memset(&Ncb, 0, sizeof(Ncb)); Ncb.ncb_command = NCBASTAT; Ncb.ncb_lana_num = adapter_num; strcpy((char *) Ncb.ncb_callname, "*"); struct ASTAT { ADAPTER_STATUS adapt; NAME_BUFFER NameBuff[30]; } Adapter; memset(&Adapter, 0, sizeof(Adapter)); Ncb.ncb_buffer = (unsigned char *)&Adapter; Ncb.ncb_length = sizeof(Adapter); if (Netbios(&Ncb) == 0) { String macaddr = ""; for(int i =0; i < 6; i++) macaddr += IntToHex(Adapter.adapt.adapter_address[i],2); return macaddr; } else return 0; } String getMacID() { LANA_ENUM AdapterList; NCB Ncb; memset(&Ncb, 0, sizeof(NCB)); Ncb.ncb_command = NCBENUM; Ncb.ncb_buffer = (unsigned char *)&AdapterList; Ncb.ncb_length = sizeof(AdapterList); Netbios(&Ncb); return (AdapterList.length>0) ? GetAdapterInfo(AdapterList.lana[0]) : String("error"); }