Fremde CPING KLasse eingebunde, aber Aufruf klappt nicht



  • Hi,

    ich versuche grad ein kleines PING Tool zu programmieren ;). Dazu wollte ich eine fertige KLasse CPING benutzen und hab diese bereits auch eingebunden. leider kann ich nun die eigentlich Ping-Funktion nicht aufrufen.

    Readme:
    --------
    CPing::PingUsingICMP

    BOOL CPing::PingUsingICMP(LPCTSTR pszHostName, CPingReply& pr, UCHAR nTTL = 10, DWORD dwTimeout = 5000, UCHAR nDataSize = 32, UCHAR nTOS = 0, BOOL bDontFragment = FALSE, LPCTSTR pszLocalBoundAddress = NULL) const

    Mein Problem liegt im 2. Paramter "CPingReply& pr", da hab ich keine Ahnung WAS ich da genau schreiben muß :-?

    Readme:
    --------
    pr This is a reference to a structure which will be filled in upon successful return of this function. Currently it contains just two members, namely:

    Address This is the IP address of the replier

    RTT This is the round trip time in Milliseconds

    Wenn ich z.b. mit

    bool online=CPing::PingUsingWinsock("10.29.2.254", &prt, 10, 5000,32, 0, FALSE, NULL, 0);

    klappt es zumindest nicht muß ICH diese Structur erst anlegen und wenn ja, wie mach ich das ?

    Danke
    Ray



  • Hallo,

    gibt es denn keine Doku oder ein Beispiel zu dieser Klasse?

    Ansonsten scheint intuitiv klar zu sein, daß es so gehen sollte:

    CPingReply pingrep;
    bool online=CPing::PingUsingWinsock("10.29.2.254", pingrep);
    

    so würde ich den Prototypen verstehen (da du sowieso als restliche Argumente die Default-Werte eingesetzt hast, kann man die auch gut weglassen)

    MfG



  • Hallo,

    Leider gibt es keine Doku über diese Structure 😞 Habe jetzt versucht das so einzubinden wie du sagtest und bekomme dann folgenden Fehler:

    error C2352: 'CPing::PingUsingWinsock' : illegal call of non-static member function

    Hm...liegt das jetzt am Aufruf oder hab ich da noch was vergessen ?

    thx
    ray



  • Ja, die Funktion ist nicht static 😉
    also

    CPingReply pingrep; 
    CPing myPing;
    bool online=myPing.PingUsingWinsock("10.29.2.254", pingrep);
    

    Grüße Rapha



  • Hi Rapha,

    lange nix gehört 🙂 also jetzt klappt es *halbwegs* . Ich kann die Funktion nun aufrufen und meine bool onlie Variable wird auch mit TRUE oder FALSE gefüllt , aber diese Struktur pingresult wird nicht geüllt. Sprich sowohl ReplyAdress, RTT und Status, bleib "0" wenn ich mir das im Debugger anschau. Eigentlich sollte da die IP adresse, die Zeit des Pings und ebenfalls "TRUE oder FALSE" rein :-?

    Hast Du eine Idee an was das liegen kann ?

    Hab mal kleinen Teil vom Quellecode hier

    struct CPingReply
    {
    //Constructors / Destructors
      CPingReply();
    
    //Member variables
    	in_addr	 Address;              //The IP address of the replier
    	unsigned long RTT;             //Round Trip time in Milliseconds
      unsigned long EchoReplyStatus; //here will be status of the last ping if successful
    };
    

    weiß nicht obs was bringt 🙂

    thx
    ray



  • Hm, der Syntax ist korrekt...
    Wo hast du die Klasse denn her?



  • Die Klasse ist von eonem codeguru Mitglied bereitgestellt worden, kann man unter http://www.naughter.com/ herunterladen. Heißt da glaub CPig 1.3.5 oder so

    ray



  • Ich rate mal...
    Hast du die Sockets mit WSAStartup initialisiert?

    Grüße Rapha



  • Ähm nein hab ich nicht 🤡

    ..aber davon steht in der Readme nix drin...das ding ist anscheinend sofort einsatzfähig so wie ich das verstehe 😞 HAst Du grad ein Tutorial oder was parat wo ich mir das mit dem WSAStartup anschauen kann 🙂 ?

    thx
    ray



  • Hi,

    schau dir mal die mitgelieferte Beispielanwendung an.

    Den Code kannst du 1 zu 1 übernehmen 😉

    Grüße Rapha



  • Hallo Rapha 🙂

    So ich habe jetzt mal den Teil hier aus der Anwendung übernommen

    WSADATA wsa;
    if (WSAStartup(MAKEWORD(2, 0), &wsa) != 0){
          MessageBox("Failed to initialize Winsock 2 Stack");
          return false;
    }
    
    ...meine Ping Funktion....
    
    WSACLeanup();
    

    Jedoch ändert das nix dara, daß diese RTT und anderen Felder der pr Struktur *leer* bleiben 😞 Ich habe auch schon beide Funktionen getestet die man aufrufen kann: PingUsingICMP und Ping UsingWinsock...bei beiden der gleiche Effekt. Oder muß ich da noch mehr CoOde übernehmen ?

    Danke
    ray



  • Funktioniert denn die Beispielanwendung (änder sie ein bisschen ab) denn mit deinen Parametern (d.h. ip-Adresse, port, blablabala)?

    Grüße Rapha


Anmelden zum Antworten