Salut,

J'essaie de trouver l'adresse MAC avec l'une des trois méthode proposé par Codegear from Borland : voici le lien :

http://dn.codegear.com/article/26040

ShowMessage(AdapterList.length); //====> retourne 0 !!!

mon code est le suivant :

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
#include <windows.h>
#include <stdlib.h>
#include <stdio.h>
#include <iostream>
#include <strstream>
#include <string>
 
//---------------------------------------------------------------------------
bool TGestionFrm::GetAdapterInfo(int nAdapterNum, string & sMAC)
{
        NCB Ncb;
        memset(&Ncb, 0, sizeof(Ncb));
        Ncb.ncb_command = NCBRESET;
        Ncb.ncb_lana_num = nAdapterNum;
        if (Netbios(&Ncb) != NRC_GOODRET)
        {
                char acTemp[80];
                ostrstream outs(acTemp, sizeof(acTemp));
                outs << "error " << Ncb.ncb_retcode << " on reset" << ends;
                sMAC = acTemp;
                return false;
        }
 
        memset(&Ncb, 0, sizeof(Ncb));
        Ncb.ncb_command = NCBASTAT;
        Ncb.ncb_lana_num = nAdapterNum;
        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)
       {
                char acMAC[18];
                sprintf(acMAC, "%02X %02X %02X %02X %02X %02X",
                int (Adapter.adapt.adapter_address[0]),
                int (Adapter.adapt.adapter_address[1]),
                int (Adapter.adapt.adapter_address[2]),
                int (Adapter.adapt.adapter_address[3]),
                int (Adapter.adapt.adapter_address[4]),
                int (Adapter.adapt.adapter_address[5]));
                sMAC = acMAC;
                return true;
       }
       else
       {
                char acTemp[80];
                ostrstream outs(acTemp, sizeof(acTemp));
                outs << "error " << Ncb.ncb_retcode << " on ASTAT" << ends;
                sMAC = acTemp;
                return false;
       }
}
//------------------------------------------------------
void __fastcall TGestionFrm::Button1Click(TObject *Sender)
{
       using namespace std;
        //========= C++ Code : BEGIN =========
         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);
         string sMAC;
         cout << "MY INFO : AdapterList.length = " << static_cast<int>(AdapterList.length) << endl;
         ShowMessage(AdapterList.length); //====> retourne 0 !!!
         for (int i = 0; i < AdapterList.length; ++i)
         {
                if (GetAdapterInfo(AdapterList.lana[i], sMAC))
                {
                        ListBox1->Items->Add(sMAC.c_str());
                        cout << "Adapter " << int (AdapterList.lana[i]) << "'s MAC is " <<
                        sMAC << endl;
                }
                else
                {
                        cerr << "Failed to get MAC address! Do you" << endl;
                        cerr << "have the NetBIOS protocol installed?" << endl;
                        break;
                }
         }
         //return 0;
}
//---------------------------------------------------------------------------

Si quelcun peut me dire pourquoi et comment je peux résoudre le problème.

Merci.