MFC -> BCB



  • Das ist doch fast reine WinAPI, die String- und List-Typen wirst du ja wohl durch die VCL-Entsprechngen ersetzt bekommen.



  • hm, er kann doch ruhig MFC verwenden. Muss aber natürlich die Header einbinden.

    Cmpilierbar ist es mit Sicherheit.



  • *lol* MOderatorentreffen? (: Andreas: Ich würde niemals freiwillig die MFC verwenden wenn ich ein n-fach besseres Framework zur Verfügung habe (:

    -junix



  • *G*



  • Hi,
    hab mal noch ne Frage, ist das hier schon mal gut:

    #include <winsock2.h>
    
        String    strTemp;
        struct hostent FAR *host;
    
        struct in_addr *ptr;
    
        DWORD dwScope = RESOURCE_CONTEXT;
        NETRESOURCE *NetResource = NULL;
        HANDLE hEnum;
        WNetOpenEnum( dwScope,NULL,NULL,NULL,&hEnum);
        WSADATA wsaData;
        WSAStartup(MAKEWORD(1,1),&wsaData);
    
        if(hEnum)
        {
        DWORD Count = 0xFFFFFFFF;
        DWORD BufferSize = 2048;
        LPVOID Buffer = new char[2048];
        WNetEnumResource( hEnum, &Count,Buffer, & BufferSize);
        NetResource= (NETRESOURCE*)Buffer;
    
        char *szHostName;
        unsigned int i,j;
        j=BufferSize/sizeof(NETRESOURCE);
        String Print;
        for (i=0;i<j;i++,NetResource++)
        {
            if( NetResource->dwUsage == RESOURCEUSAGE_CONTAINER &&
            NetResource->dwType == RESOURCETYPE_ANY)
            {
            if( NetResource->lpRemoteName )
            {
                String strFullName = NetResource->lpRemoteName;
                if(strFullName.SubString(2,1) == "\\" )
                strFullName = strFullName.SubString(strFullName.Length()-2, 2);
                gethostname(szHostName, strlen( szHostName));
                host = gethostbyname(strFullName.c_str());
    
                if( host == NULL) continue;
                ptr = (struct in_addr *)
                host->h_addr_list[0];
    
                int a = ptr->S_un.S_un_b.s_b1;
                int b = ptr->S_un.S_un_b.s_b2;
                int c = ptr->S_un.S_un_b.s_b3;
                int d = ptr->S_un.S_un_b.s_b4;
    
                strTemp.Format("%s --> %d.%d.%d.%d",strFullName,a,b,c,d);
                StringGrid1->RowCount++;
                if (StringGrid1->RowCount == 2) StringGrid1->FixedRows = 1;
                StringGrid1->Cells[0][StringGrid1->RowCount-1] = strFullName;
    
            }
            }
        }
        delete Buffer;
        WNetCloseEnum( hEnum );
        }
        WSACleanup();
    

    Wenn ja, wie muss ich

    strTemp.Format("%s --> %d.%d.%d.%d",strFullName,a,b,c,d);
    

    schreiben damit ich keine Fehlermeldung bekomme!

    Danke

    Alexander Sulfrian



  • hm,

    ich glaub eher:

    strTemp=strTemp.Format("%s --> %d.%d.%d.%d",strFullName,a,b,c,d);
    

    PS: Ungetestet



  • Hi,
    da kommen aber immer noch 3 Fehlermeldungen:

    Konvertierung von 'AnsiString' nach 'const TVarRec *' nicht möglich.
    Keine Übereinstimmung des Typs bei Parameter args.
    Zu viele Parameter im Aufruf.

    Was mach ich falsch?

    Danke

    Alexander Sulfrian



  • geh bitte in den Quellcode oben und makiere die Zeilen, in denen die Fehler auftreten und benenne bitte die Fehlermeldungen vollständig.

    [ Dieser Beitrag wurde am 20.01.2003 um 22:27 Uhr von AndreasW editiert. ]



  • Hi,
    Die Fehlermeldungen kommen in der Zeile die ich oben schon mal zur Frage gestellt hatte:

    strTemp=strTemp.Format("%s --> %d.%d.%d.%d",strFullName,a,b,c,d);
    

    und die Fehlermeldungen lauten (vollständig):

    E2034: Konvertierung von 'AnsiString' nach 'const TVarRec *' nicht möglich.
    E2342: Keine Übereinstimmung des Typs bei Parameter args.
    E2226: Zu viele Parameter im Aufruf.

    Hoffe das reicht!

    Danke

    Alexander Sulfrian



  • Ach so,

    hab ich übersehen..

    int a = ptr->S_un.S_un_b.s_b1;
                int b = ptr->S_un.S_un_b.s_b2;
                int c = ptr->S_un.S_un_b.s_b3;
                int d = ptr->S_un.S_un_b.s_b4;
    
                strTemp+=IntToStr(a)+"   ";
                strTemp+=IntToStr(b)+"   ";
                strTemp+=IntToStr(c)+"   ";
                strTemp+=IntToStr(d)+"   ";
                strTemp+=strFullName; // oder wie auch immer formatiert
    


  • Danke, funkzt! :p

    Alexander Sulfrian

    [edit]
    Mist zu früh gefreut!
    Also kompilieren geht jetzt aber er zeigt keine Computer an!
    Und könnte man das vielleicht auch so machen, dass mein Rechner einbezogen wird!

    Noch mal zur Vollstandigkeit mein CODE:
    - Hab ein Formular(Form4) mit einem StringGrid
    - Hier meine *.cpp-Datei:

    //---------------------------------------------------------------------------
    #include <vcl.h>
    #include <winsock2.h>
    #pragma hdrstop
    
    #include "Unit4.h"
    //---------------------------------------------------------------------------
    #pragma package(smart_init)
    #pragma resource "*.dfm"
    TForm4 *Form4;
    //---------------------------------------------------------------------------
    __fastcall TForm4::TForm4(TComponent* Owner)
        : TForm(Owner)
    {
    }
    //---------------------------------------------------------------------------
    
    void __fastcall TForm4::FormCreate(TObject *Sender)
    {
     StringGrid1->Cells[0][0] = "Computername";
     StringGrid1->Cells[1][0] = "Status";
    }
    //---------------------------------------------------------------------------
    void __fastcall TForm4::FormPaint(TObject *Sender)
    {
        String    strTemp;
        struct hostent FAR *host;
    
        struct in_addr *ptr;
    
        DWORD dwScope = RESOURCE_CONTEXT;
        NETRESOURCE *NetResource = NULL;
        HANDLE hEnum;
        WNetOpenEnum( dwScope,NULL,NULL,NULL,&hEnum);
        WSADATA wsaData;
        WSAStartup(MAKEWORD(1,1),&wsaData);
    
        if(hEnum)
        {
        DWORD Count = 0xFFFFFFFF;
        DWORD BufferSize = 2048;
        LPVOID Buffer = new char[2048];
        WNetEnumResource( hEnum, &Count,Buffer, & BufferSize);
        NetResource= (NETRESOURCE*)Buffer;
    
        char *szHostName;
        unsigned int i,j;
        j=BufferSize/sizeof(NETRESOURCE);
        String Print;
        for (i=0;i<j;i++,NetResource++)
        {
            if( NetResource->dwUsage == RESOURCEUSAGE_CONTAINER &&
            NetResource->dwType == RESOURCETYPE_ANY)
            {
            if( NetResource->lpRemoteName )
            {
                String strFullName = NetResource->lpRemoteName;
                if(strFullName.SubString(2,1) == "\\" )
                strFullName = strFullName.SubString(strFullName.Length()-2, 2);
                gethostname(szHostName, strlen( szHostName));
                host = gethostbyname(strFullName.c_str());
    
                if( host == NULL) continue;
                ptr = (struct in_addr *)
                host->h_addr_list[0];
    
                int a = ptr->S_un.S_un_b.s_b1;
                int b = ptr->S_un.S_un_b.s_b2;
                int c = ptr->S_un.S_un_b.s_b3;
                int d = ptr->S_un.S_un_b.s_b4;
    
                strTemp+=IntToStr(a)+"   ";
                strTemp+=IntToStr(b)+"   ";
                strTemp+=IntToStr(c)+"   ";
                strTemp+=IntToStr(d)+"   ";
                strTemp+=strFullName; // oder wie auch immer formatiert
    
                StringGrid1->RowCount++;
                if (StringGrid1->RowCount == 2) StringGrid1->FixedRows = 1;
                StringGrid1->Cells[0][StringGrid1->RowCount-1] = strFullName;
    
            }
            }
        }
        delete Buffer;
        WNetCloseEnum( hEnum );
        }
        WSACleanup();
    }
    //--------------------------------------------------------------------------
    

    Was mach ich falsch? Verbesserungsvorschläge?

    [/edit]

    [ Dieser Beitrag wurde am 21.01.2003 um 17:30 Uhr von Alexander Sulfrian editiert. ]



  • Pack mal die Form an der TitleBar und rutsche ein bisschen damit rum. Oder verschiebe sie so, dass ein Teil von ihr nicht mehr zu sehen ist und dann wieder rein ins Bild.

    [ Dieser Beitrag wurde am 21.01.2003 um 21:48 Uhr von WebFritzi editiert. ]



  • Hi,
    warum beim öffnen des Fensters muss es doch auch gezeichnet werden oder?

    Danke

    Alexander Sulfrian



  • Dachte ich bis gestern auch. 😃



  • Hi, also, ich habe das selbe Ergebnis wie Alexander Sulfrian. Es werden keine Rechner angezeigt.
    Wenn ich mit dem Debugger schritt für Schritt durchgehe stehen zwar in strFullName die Rechnernamen, diese werden aber irgendwie nicht korrekt an gethostbyname übergeben, so dass host immer NULL ist.

    host = gethostbyname(strFullName.c_str());
         if( host == NULL) continue; //Continue wir immer durchgeführt
    

    Woran kann das liegen?



  • Hi,
    jemand eine Idee?

    Danke

    Alexander Sulfrian


Anmelden zum Antworten