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)? 😉





  • 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");
    }
    

Anmelden zum Antworten