[gelöst]Fehlersuche: PIP_ADAPTER_UNICAST_ADDRESS unbekannter bezeichner



  • Hallo,

    eigentlich ist es mir fast peinlich euch damit zu belästigen, aber ich finde mein Problem nicht und weiß auch langsam nicht mehr, wie ich weiter vorgehen soll.

    laut MSDN: https://msdn.microsoft.com/en-us/library/windows/desktop/aa366066(v=vs.85).aspx muss ich Winsock2 vor der IPhlpAPi einbinden. Das habe ich dann auch getan:

    #include <sstream>
    #include <iomanip>
    #include <stdio.h>
    #include <stdint.h>
    #include <math.h>
    #include <string>
    
    #include <WinSock2.h>
    #include <IPHlpApi.h>
    #include <ws2ipdef.h>
    #include <mstcpip.h>
    #include <inaddr.h>
    #include <in6addr.h>
    #include <windows.h>
    #include <LM.h>
    #include <Psapi.h>
    
    #include "systeminformation.h"
    

    Dennoch erhalte ich in "systeminformation.h", was der Header zu meiner Klasse ist den Compiler Fehler: "C2061: Syntaxfehler: Bezeichner 'PIP_ADAPTER_UNICAST_ADDRESS'".
    Was ein nicht deklarierter Bezeichner wäre. Wenn ich in die IPHlpApi.h hinein sehe, sehe ich auch, dass dort _WINSOCK2API_ nicht definiert zu sein scheint.
    Haabt ihr eine Idee woran es liegt oder wie ich bei der Fehlersuche noch vorgehen kann?

    Ich benutze den msvc2013 compiler im QT Creator 4.1.

    Vielen Dank für eure Hilfe.



  • Ich hatte mal ähnliche Probleme und habe am Ende die windows.h nicht eingebunden, weil die über (iirc) winsock included wird. bei mir sieht das konkret so aus:

    /*windows.hpp*/
    #pragma once
    
    #pragma warning( push )
    #pragma warning( disable: 4091  )
    #define NOMINMAX
    #define UMDF_USING_NTSTATUS
    
    #include <winsock2.h>
    //hier iphlpapi.h
    #include <winnt.h>
    #include <ws2tcpip.h>
    #include <winternl.h>
    #include <Psapi.h>
    #include <process.h>
    #include <ntstatus.h>
    
    #pragma warning( pop )
    

    in jeder datei, in der ich meine, iwas von windows zu brauchen, schreib ich dann #include "windows.hpp"



  • Danke dir, dafür, das hat leider nicht geholfen auch wenn du recht hast und die windows.h überflüssig geworden ist.



  • ..definier in eigenen Header oder in IPHlpApi.h:
    https://msdn.microsoft.com/en-us/library/ee494101(v=winembedded.70).aspx
    danach muß der Fehler weg sein !



  • //#include <iphlpapi.h> - nur so kommt fehler
    
    #include <winsock.h> //stört nich
    #include <windows.h> //stört nich
    
    #include <winsock2.h> 
    #include <iphlpapi.h>
    #include <winnt.h> 
    #include <ws2tcpip.h> 
    #include <winternl.h> 
    #include <Psapi.h> 
    #include <process.h> 
    #include <ntstatus.h> 
    
    int main()
    {
    	PIP_ADAPTER_UNICAST_ADDRESS asd;
    }
    

    ansonsten kann ich deinen fehler nicht nachvollziehen...



  • Bei mir trat mal ein ähnlicher Fehler auf. Durch ändern der include Reihenfolge hatte ich das Problem dann gelöst bekomen.



  • Also zum einen fehlen bei Unskilled ein paar Header die ich leider zusätzlich benötige, zum anderen ist noch folgender Umstand interessant:
    In der *.cpp der Klasse scheint die Struktur bekannt zu sein, da das Syntaxhighlighting vernünftig Funktioniert und ich auch von der Struktur zur Definition springen kann. Es funktioniert nicht im Headerfile der Klasse, das aber als letzter Header included wird.
    Natürlich könnte ich die Klasse jetzt auch komplett in einer Datei beschreiben, das ist mir aber an der Stelle etwas zu "dreckig".
    Ich werde mal weiter schauen, ob ich etwas mit Includereihenfolge bewirken kann und auch im Rest des Codes mal etwas aufräumen was die Header angeht.
    Danke euch



  • Hi,

    also ich habe mein Problem gelöst bekommen. Ihr hattet an sich recht, das sinnvollste wäre, die Windows Funktionen mit beachteter Include Reihenfolge in einen eigenen Header auszulagern und den einzubinden.
    Ich habe in meinem Fall das Problem gehabt, dass ich an einigen Stellen eine Windows.h vor der WinSock2.h inkludiert hatte, was dann zu einer ganzen Reihe von Problemen führte.

    Danke euch für die Unterstützung!


Anmelden zum Antworten