Trotz (anscheinend) "richtiger" Headeranordnung immernoch Compiler-Fehler...



  • Naja, meintest du nicht das ich die windows.h inkludieren soll um dann zu schauen ob die Fehler noch auftauchen?

    Das habe ich gemacht:

    #include <stdafx.h>
    #include <Icmpapi.h>
    #include <stdio.h>
    #include <iostream>
    #include <windows.h>

    Und die Fehler bleiben. Oder meinst du in der Datei StdAfx ? Soll ich da windows.h inkludieren ?

    Danke
    2Be



  • 2Be schrieb:

    Oder meinst du in der Datei StdAfx ? Soll ich da windows.h inkludieren ?

    Wäre eine Möglichkeit. Hauptsache, windows.h wird vor icmpapi.h eingebunden. Wenn Du irgendetwas nach icmpapi.h einbindest, kann das an dem Problem in icmpapi.h ja nichts ändern, gell? 😉
    Und schreib bitte #include "stdafx.h".



  • Ne, bringt alles nichts.
    Wenn ich die windows.h vor icmpapi.h inkludiere, dann erscheinen diese Fehler:

    Ping.cpp
    c:\programme\microsoft platform sdk for windows xp sp2\include\icmpapi.h(175) : error C2061: syntax error : identifier 'IPAddr'
    c:\programme\microsoft platform sdk for windows xp sp2\include\icmpapi.h(264) : error C2061: syntax error : identifier 'IPAddr'
    c:\programme\microsoft platform sdk for windows xp sp2\include\icmpapi.h(288) : error C2061: syntax error : identifier 'PIP_OPTION_INFORMATION'
    C:\Programme\Microsoft Visual Studio\MyProjects\Ping\Ping.cpp(16) : error C2065: 'icmp_echo_reply' : undeclared identifier
    C:\Programme\Microsoft Visual Studio\MyProjects\Ping\Ping.cpp(18) : error C2065: 'iep' : undeclared identifier
    C:\Programme\Microsoft Visual Studio\MyProjects\Ping\Ping.cpp(18) : error C2059: syntax error : ')'
    C:\Programme\Microsoft Visual Studio\MyProjects\Ping\Ping.cpp(19) : error C2227: left of '->RoundTripTime' must point to class/struct/union
    C:\Programme\Microsoft Visual Studio\MyProjects\Ping\Ping.cpp(21) : error C2660: 'IcmpSendEcho' : function does not take 8 parameters
    C:\Programme\Microsoft Visual Studio\MyProjects\Ping\Ping.cpp(25) : error C2227: left of '->RoundTripTime' must point to class/struct/union
    Error executing cl.exe.

    Ping.exe - 9 error(s), 0 warning(s)

    Wenn ich jedoch die windows.h nach icmpapi.h inkludiere, dann bleiben die 3 Fehler.

    Ping.cpp
    c:\programme\microsoft platform sdk for windows xp sp2\include\icmpapi.h(62) : error C2146: syntax error : missing ';' before identifier 'WINAPI'
    c:\programme\microsoft platform sdk for windows xp sp2\include\icmpapi.h(62) : error C2501: 'HANDLE' : missing storage-class or type specifiers
    c:\programme\microsoft platform sdk for windows xp sp2\include\icmpapi.h(62) : fatal error C1004: unexpected end of file found
    Error executing cl.exe.

    Ping.exe - 3 error(s), 0 warning(s)

    😞 Was kann ich nun tun...?

    Danke
    2Be



  • Welches VC++ hast du? Kann's vielleicht sein, dass die ganz neuen Platform SDK-Header nicht mehr mit alten Compilern funktionieren?



  • Hm, wer weiß, ich benutze VS 6.0 ... ?



  • Kannst du überhaupt Programme mit diesen Platform SDK-Headern übersetzen? Also geht's grundsätzlich nicht oder geht's nur nicht mit icmpapi.h?



  • 2Be schrieb:

    Ne, bringt alles nichts.

    Na aber sicher doch. Die Zeilennummern sind höher, also wurden die ursprünglichen Fehler behoben.

    Ich habe nach IPAddr gesucht und eine Definition in ipexport.h gefunden. Binde also nach windows.h aber vor icmpapi.h noch ipexport.h ein. Dann sehen wir weiter.



  • Super, mit der ipexport.h klappt es !!!
    Doch wenn ich jetzt mein Ping-Programm kompiliere, dann erscheint immernoch dieser Fehler:

    Ping.cpp
    C:\Programme\Microsoft Visual Studio\MyProjects\Ping\Ping.cpp(34) : error C2065: 'inet_addr' : undeclared identifier
    Error executing cl.exe.

    Ich hab doch alle Header inkludiert !?
    Es liegt an dieser Zeile:

    if((dwReply = IcmpSendEcho(hIcmpFile, 
    		inet_addr("123.456.789.0"), 
                  .....
    

    Welchen Header muss ich denn noch inkludieren damit er inet_addr erkennt ?
    In der msdn steht das für die IPAddr-Struktur die ipexport.h völlig ausreicht...

    Danke
    2Be





  • 😃 Und wo genau soll ich den Header inkludieren ? 😃

    Von diesen ganzen Headern:

    #include "stdafx.h"
    #include <windows.h>
    #include "ipexport.h"
    #include <Icmpapi.h>
    #include <stdio.h>
    #include <iostream>
    #pragma comment (lib, "Iphlpapi.lib")

    Denn egal wo ich sie hinsetze, es erscheinen massig Fehler... 😮

    Danke³
    2Be



  • Schau her, es entstehen 73 warnings.... 😮 😞

    Ping.exe - 0 error(s), 73 warning(s)

    Bei dieser Headeranordnung:

    #include "stdafx.h"
    #include <winsock2.h>
    #include <windows.h>
    #include "ipexport.h"
    #include <Icmpapi.h> 
    #include <stdio.h> 
    #include <iostream>
    #pragma comment (lib, "Iphlpapi.lib")
    #pragma comment(lib, "Ws2_32.lib")
    

    Warum nur? Egal wo ich den winsock2 Header positioniere, die 73 Fehler bleiben...

    Danke³
    2Be



  • Was sind denn das für Warnungen (Warnung≠Fehler)? Auf welche Warnstufe hast Du den Compiler eingestellt?



  • Naja, das sind Fehler das in der Winsock2.h bestimmte Befehle nicht erkannt werden...

    winsock2.h(764) : warning C4005: 'WSA_QOS_GENERIC_ERROR' : macro redefinition

    winerror.h(14750) : see previous definition of 'WSA_QOS_GENERIC_ERROR'

    winsock2.h(759) : warning C4005: 'WSA_QOS_BAD_OBJECT' : macro redefinition

    Das sind nur 3 von 74 warnings...

    Ping.exe - 0 error(s), 74 warning(s)

    tag schrieb:

    Auf welche Warnstufe hast Du den Compiler eingestellt?

    Ich weiß nicht, hab alles so gelassen seit der Installation...
    Wo kann ich das denn einstellen..?

    Danke
    2Be



  • 2Be schrieb:

    Naja, das sind Fehler das in der Winsock2.h bestimmte Befehle nicht erkannt werden...

    Ne, das sind Fehler wegen doppelter Definitionen eines Makros. Da die beiden Definitionen aber mehr oder weniger identisch sind, macht VC eine Warnung daraus...

    2Be schrieb:

    winsock2.h(764) : warning C4005: 'WSA_QOS_GENERIC_ERROR' : macro redefinition

    winerror.h(14750) : see previous definition of 'WSA_QOS_GENERIC_ERROR'

    winsock2.h(759) : warning C4005: 'WSA_QOS_BAD_OBJECT' : macro redefinition

    Hmmm... Die Konstanten stehen tatsächlich in zwei Headern drin. Über den Definitionen steht jeweils

    //
    // WinSock error codes are also defined in WinSock.h
    // and WinSock2.h, hence the IFDEF
    //
    #ifndef WSABASEERR
    #define WSABASEERR 10000
    [...]
    #define  WSA_QOS_GENERIC_ERROR           (WSABASEERR + 1015)
    [...]
    #endif
    

    Warum die aber dennoch doppelt definiert werden und wie Du das beseitigen kannst, kann ich nicht beantworten.
    Sofern es sich nur um diese Konstanten handelt, sind die Warnungen nicht unbedingt kritisch. Das Programm müsste trotzdem laufen.

    2Be schrieb:

    tag schrieb:

    Auf welche Warnstufe hast Du den Compiler eingestellt?

    Ich weiß nicht, hab alles so gelassen seit der Installation...
    Wo kann ich das denn einstellen..?

    Die kannst Du für jedes Projekt einstellen. Das steht in den Projektoptionen unter C/C++. Ich dachte, Du hättest vielleicht die Warnstufe auf das Maximum gestellt, denn dann gibt es Probleme mit einigen Headern...



  • Ja, das Programm läuft trotzdem...Doch irgendwie nerven mich die Fehler 😃

    Naja was solls...

    Danke für alles
    2Be


Anmelden zum Antworten