try funktioniert nicht
-
In einer Funktion frage ich die IP Adresse eines Hostrechners an einem DSN Server ab, das funktioniert auch.
Wenn aber keine Internetverbindung besteht, stürzt die Anwendung natürlich ab.try { //Winsock initialisieren if(WSAStartup(MAKEWORD (2,2) , &wsaData) != 0) { return (char*)""; } else { //IP abfragen struct hostent * HostInfo = gethostbyname(szInetAdresse); memcpy(&(SockAddr.sin_addr),HostInfo->h_addr,HostInfo->h_length); //Adresse uebernehmen szIpAdresse = inet_ntoa(SockAddr.sin_addr); //WinSock bereinigen WSACleanup(); return szIpAdresse; } } catch(const char* e) { MessageBox(0, e, "", MB_OK); }Daher möchte ich try verwende, aber das Programm stürzt gleich ab wie ohne.
Kann mir jemand segen, was ich da falsch mache?Danke für jede Hilfe.
-
Warum sollte try hier helfen? Das sind C Funktionen, die Fehlerprüfung musst du entsprechend der Doku der Funktionen durchführen.
-
try (mit catch) fängt nicht Fehler ab. Und Exceptions beheben auch keine Bugs (wie ein Freund von mir zu sagen pflegt oO)
try und catch führen nur einen Codeabschnitt aus und reagieren auf etwaige geworfene Exceptions. Damit du Fehler dabei fängst und beheben/reagieren kannst, müssen diese auch so kommen.
Und in C gibt es wie manni66 schon sagte keine Exceptions, da wird das Error-Handling ganz anders bewerkstelligt. Tja, und wenn keine Exceptions geworfen wird, kann auch keine gefangen werden, egal was für ein Fehler passiert ist.
(Stichwort Rückgabewerte der Funktionen ;))
-
Danke für eure Antworten, bin leider erst heute zurück um mich zu melden.
Ich habe es jetzt so gelöst, ist das der richtige Weg?
//deklaration der Headerdateien //------------------------------------------------------------------------------------------------- #include "main.h" //------------------------------------------------ //ermitteln der IP-Adresse des Host //------------------------------------------------ char * GetServerIp(char * szInetAdresse) { WSADATA wsaData; SOCKADDR_IN SockAddr; char * szIpAdresse; //----------------------------- //Winsock initialisieren if(WSAStartup(MAKEWORD (2,2) , &wsaData) != 0) { return (char *)""; } else { //IP abfragen struct hostent * HostInfo = gethostbyname(szInetAdresse); //Fehler aufgetreten? if (WSAGetLastError() != 0) { MessageBox(0, "Fehler Netzverbindung", "", MB_OK); return (char *)""; } else { memcpy(&(SockAddr.sin_addr),HostInfo->h_addr,HostInfo->h_length); //Adresse uebernehmen szIpAdresse = inet_ntoa(SockAddr.sin_addr); //WinSock bereinigen WSACleanup(); return szIpAdresse; } } }Die fehlende Netzwerkverbindung wird abgefangen - das Programm stürtzt nicht mehr ab.
Danke
-
Jain, was du da machst ist hochgradig kein C++, wir sind hier aber im C++ Forum.
Unter der Prämisse, dass die Funktionen richtig sind und auch richtig angewandt wurden, kann man sagen, ja das ist richtig.
Aber ich kenne mich mit Socket und WinAPI Programmierung nicht aus, sprich ich kann dir nicht sagen, ob die Funktionen so richtig sind.
-
Ja Du hast recht, ich habe den Thread in die falsche Abteilung gestellt.
Aber trotzdem danke für Deine Hilfe!
