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::PingUsingICMPBOOL 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

alsoCPingReply 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