undefinierten Funktion 'GetAdaptersAddresses'



  • Hi,

    Ich benötige für mein Programm den aktuellen DNS Server, dazu habe ich in der MSDN die Funktion GetAdaptersAddresses gefunden. Das Probelm ist nun, dass er weder den Typ 'PIP_ADAPTER_ADDRESSES' noch die Funktion 'GetAdaptersAddresses' kennt und dies obwohl ich, so wie es in der Anleitung steht, den Header Iphlpapi.h eingebunden und die Iphlpapi.lib dem Projekt hinzugefügt habe. Was soll das?

    Hier noch die genaue Fehlermeldung:

    [C++ Fehler] Unit1.cpp(1076): E2451 Undefiniertes Symbol 'PIP_ADAPTER_ADDRESSES'
    [C++ Fehler] Unit1.cpp(1076): E2379 In Anweisung fehlt ;
    [C++ Fehler] Unit1.cpp(1077): E2451 Undefiniertes Symbol 'pAddresses'
    [C++ Fehler] Unit1.cpp(1077): E2451 Undefiniertes Symbol 'IP_ADAPTER_ADDRESSES'
    [C++ Fehler] Unit1.cpp(1077): E2188 Ausdruckssyntax
    [C++ Fehler] Unit1.cpp(1083): E2268 Aufruf der undefinierten Funktion 'GetAdaptersAddresses'
    [C++ Fehler] Unit1.cpp(1083): E2451 Undefiniertes Symbol 'AF_INET'
    [C++ Fehler] Unit1.cpp(1089): E2188 Ausdruckssyntax



  • Hallo

    in dem Text aus der MSDN steht auch das

    Requirements
    Client Requires Windows "Longhorn" or Windows XP.

    Hast du zufällig Win2000 oder darunter?

    bis bald
    akari



  • Komischer Kommentar akari. Trotzdem kann man es kompilieren.



  • Hallo

    warum ist mein Kommentar komisch? I.a. bedeuten diese Voraussetzungen in der MSDN, das erst ab diesen Versionen diese Funktionen vorhanden sind. Weil auch die WinAPI mitwächst. Und wenn also in Win2000 in dem Header diese Funktion mitsamt Konstanten nicht definiert ist, wird diese vom Compiler nicht gefunden.

    bis bald
    akari



  • Ne, ich benutz Win XP pro, zuerst hab ich die Funktion GetAdaptersInfo gefunden, das dort angegebene Beispiel kann ich auch problemlos kompilieren. Doch als ich dort noch mals etwas genauer reischaute, bemerkte ich:

    MSDN schrieb:

    Windows Server 2003 and Windows XP: Use the GetAdaptersAddresses function instead of GetAdaptersInfo.

    Also dachte ich, es wäre wohl besser GetAdaptersAddresses zuverwenden



  • das ganze benötigt laut header die winsock 2.0 api.

    entweder du setzt das define _WINSOCK2API_ in den projektoptionen (unter bedingungen) oder kopierst dir einfach die benötigten strukturen und definitionen in deine unit. dann sollte es gehen, schätze ich.



  • Hi, erst mal danke für die Hilfe. Habe beides Versucht. Bei beiden Varianten scheint er die Sachen nun zu kennen, bloss erhalte ich nun überall wo SOCKET_ADDRESS Address;
    steht die Fehlermeldung:

    BCB schrieb:

    [C++ Fehler] Unit1.cpp(56): E2303 Typname erwartet



  • vlei hilft dir ja auch das weiter:

    http://delphi.ktop.com.tw/TOPIC.ASP?TOPIC_ID=53021



  • Danke für den Link, leider hat derjenige das selbe Problem wie ich.
    Wenn ich die typedef's in meine Unit kopiere und noch den Header Winsock2.h inklude und die Ws2_32.lib dem Projekt hinzufüge, hat er kein Problem mit den SOCKET_ADDRESS Address, bloss habe ich bei dieser Variante das Problem, dass er die Funktion GetAdaptersAddresses nicht kennt. Die kennt er scheinbar auch nur wenn ich in den Projektoptionen noch die Bedingung _WINSOCK2API_ hinzufüge, dann hat er allerdings das Problem mit den SOCKET_ADDRESS Address im iptypes.h Header nach wie vor.
    Nun hab ich versucht, in der iptypes.h die Winsock2.h zu inkludieren, nütz jedoch nichts. Ausserdem bin ich der Meinung, dass die von Borland mitgelieferten Headers nicht mehr abgeändert werden sollten, bzw. müssen.



  • naja SOCKET_ADDRESS ist wo anderes definiert (nspapi.h):

    //
    // SockAddr Information
    //
    typedef struct _SOCKET_ADDRESS {
        LPSOCKADDR lpSockaddr ;
        INT iSockaddrLength ;
    } SOCKET_ADDRESS, *PSOCKET_ADDRESS, FAR * LPSOCKET_ADDRESS ;
    

    SOCKADDR (bzw. LPSOCKADDR) steht in winsock2.h



  • müsste doch eigentlich gehen, wenn du nur winsock2.h inkludierst und die strukturen gar nicht erst kopierst. danach den iphlpapi.h einbinden, damit dieser das winsock-define kennt.



  • Als ich in der MSDN nach Socket gesucht habe, kam dies. Nun ja, so funktionierts auf jeden fall. Den Eintrag _WINSOCK2API_ weglassen, die Winsock2.h vor der Iphlpapi.h inkluden, die Ws2_32.lib dem Projekt hinzufügen und es funktioniert 🙂


Anmelden zum Antworten