IP Adresse mit C++ einlesen
-
Ich wollte nen kurzes Programm schreiben, welches meine jeweils aktuelle IP adresse in eine Datei schreibt.
Das Problem ist jetzt bloß, wie mache ich es das C++ die aktuelle IP adresse selbstständig herausfindet und z.B. als String in den Speicher liest?Matthias
-
Hallo,
mit Standard C++ ist das so nicht möglich. Du musst vom Betriebsystem abhängige Funktionen benutzen. Welches BS benutzt du denn?
-
falls W, so G ins FAQ von WinAPI
-
Vielen Dank schonmal, hatte das FAQ Forum noch nicht gesehen, hab mich auch erst heute hier angemeldet.
Hab jetzt aber trotzdem noch nen Problem:
und zwar habe ich den Code aus dem Beitrag "FAQ - WinAPI :: IP Addresse" in die entsprechenden Dateien kopiert und Versucht zu kompilieren. Dabei kommt dann aber folgende Fehlermeldung:$ !g g++ CGetIP.cpp CGetIP.h CGetIP.cpp: In member function `bool CGetIP::ConnectToFile()': CGetIP.cpp:73: warning: passing NULL used for non-pointer argument passing 7 of `void* InternetConnectA(void*, const CHAR*, short unsigned int, const CHAR*, const CHAR*, long unsigned int, long unsigned int, long unsigned int)' CGetIP.cpp:73: warning: argument to non-pointer type `long unsigned int' from NULL g++.exe: compilation of header file requestedWas mache ich jetzt noch Falsch?
Matthias
-
Dieser Thread wurde von Moderator/in HumeSikkins aus dem Forum C++ in das Forum WinAPI verschoben.
Im Zweifelsfall bitte auch folgende Hinweise beachten:
C/C++ Forum :: FAQ - Sonstiges :: Wohin mit meiner Frage?Dieses Posting wurde automatisch erzeugt.
-
Hallo,
Matthias147 schrieb:
Dabei kommt dann aber folgende Fehlermeldung:
das ist kein Fehler, aber eine Warnung, die man auch nicht ignorieren sollte. Nach MSDN ist der vorletzte Parameter für InternetConnect ein DWORD, es wird aber NULL übergeben, und das muß nicht sein:
m_hConnection = InternetConnect(m_hINet, m_pszFileName, 80, 0, 0, INTERNET_SERVICE_HTTP, 0, 0);g++.exe: compilation of header file requested
das muß auch nicht sein, CGetIP.h muß nicht kompiliert werden (wird ja von CGetIP.cpp includiert)

MfG
-
Soweit klappt es,aber ...
Zitat:
g++.exe: compilation of header file requested
das muß auch nicht sein, CGetIP.h muß nicht kompiliert werden (wird ja von CGetIP.cpp includiert)
ich weiß, die CGetIP.h muss nicht mitkompiliert werden, alos habe ich das ganze jetzt nochmal so compiliert, dabei kommt dann diese Meldung heraus.
$ g++ CGetIP.cpp C:/DOKUME~1/MATTHI~1/LOKALE~1/Temp/cca2baaa.o(.text+0x2a):CGetIP.cpp: undefined reference to `WSAStartup@8' C:/DOKUME~1/MATTHI~1/LOKALE~1/Temp/cca2baaa.o(.text+0x70):CGetIP.cpp: undefined reference to `WSAStartup@8' C:/DOKUME~1/MATTHI~1/LOKALE~1/Temp/cca2baaa.o(.text+0xb5):CGetIP.cpp: undefined reference to `WSACleanup@0' C:/DOKUME~1/MATTHI~1/LOKALE~1/Temp/cca2baaa.o(.text+0xd1):CGetIP.cpp: undefined reference to `WSACleanup@0' C:/DOKUME~1/MATTHI~1/LOKALE~1/Temp/cca2baaa.o(.text+0xf2):CGetIP.cpp: undefined reference to `gethostname@8' C:/DOKUME~1/MATTHI~1/LOKALE~1/Temp/cca2baaa.o(.text+0x118):CGetIP.cpp: undefined reference to `gethostbyname@4' C:/DOKUME~1/MATTHI~1/LOKALE~1/Temp/cca2baaa.o(.text+0x1cc):CGetIP.cpp: undefined reference to `inet_ntoa@4' C:/DOKUME~1/MATTHI~1/LOKALE~1/Temp/cca2baaa.o(.text+0x2a9):CGetIP.cpp: undefined reference to `InternetOpenA@20' C:/DOKUME~1/MATTHI~1/LOKALE~1/Temp/cca2baaa.o(.text+0x2e3):CGetIP.cpp: undefined reference to `InternetConnectA@32' C:/DOKUME~1/MATTHI~1/LOKALE~1/Temp/cca2baaa.o(.text+0x328):CGetIP.cpp: undefined reference to `HttpOpenRequestA@32' C:/DOKUME~1/MATTHI~1/LOKALE~1/Temp/cca2baaa.o(.text+0x361):CGetIP.cpp: undefined reference to `HttpSendRequestA@20' C:/DOKUME~1/MATTHI~1/LOKALE~1/Temp/cca2baaa.o(.text+0x399):CGetIP.cpp: undefined reference to `InternetReadFile@16' C:/DOKUME~1/MATTHI~1/LOKALE~1/Temp/cca2baaa.o(.text+0x46f):CGetIP.cpp: undefined reference to `InternetCloseHandle@4' C:/DOKUME~1/MATTHI~1/LOKALE~1/Temp/cca2baaa.o(.text+0x489):CGetIP.cpp: undefined reference to `InternetCloseHandle@4' C:/DOKUME~1/MATTHI~1/LOKALE~1/Temp/cca2baaa.o(.text+0x4a3):CGetIP.cpp: undefined reference to `InternetCloseHandle@4' c:/Programme/MinGW/bin/../lib/gcc-lib/mingw32/3.2.3/../../../libmingw32.a(main.o)(.text+0x97):main.c: undefined reference to `WinMain@16'Das Problem ist der Compiler erstellt keine Ausführbare Datei.
Was kann den jetzt noch falsch sein?Matthias
-
#include <winsock2.h>
-
Du hast wohl vergessen Ws2_32.lib mitzulinken

-
so habs mal gemacht, und ist auch schon weniger geworden:
$ g++ CGetIP.cpp ws2_32.Lib C:/DOKUME~1/MATTHI~1/LOKALE~1/Temp/ccwhaaaa.o(.text+0x2a9):CGetIP.cpp: unde reference to `InternetOpenA@20' C:/DOKUME~1/MATTHI~1/LOKALE~1/Temp/ccwhaaaa.o(.text+0x2e3):CGetIP.cpp: unde reference to `InternetConnectA@32' C:/DOKUME~1/MATTHI~1/LOKALE~1/Temp/ccwhaaaa.o(.text+0x328):CGetIP.cpp: unde reference to `HttpOpenRequestA@32' C:/DOKUME~1/MATTHI~1/LOKALE~1/Temp/ccwhaaaa.o(.text+0x361):CGetIP.cpp: unde reference to `HttpSendRequestA@20' C:/DOKUME~1/MATTHI~1/LOKALE~1/Temp/ccwhaaaa.o(.text+0x399):CGetIP.cpp: unde reference to `InternetReadFile@16' C:/DOKUME~1/MATTHI~1/LOKALE~1/Temp/ccwhaaaa.o(.text+0x46f):CGetIP.cpp: unde reference to `InternetCloseHandle@4' C:/DOKUME~1/MATTHI~1/LOKALE~1/Temp/ccwhaaaa.o(.text+0x489):CGetIP.cpp: unde reference to `InternetCloseHandle@4' C:/DOKUME~1/MATTHI~1/LOKALE~1/Temp/ccwhaaaa.o(.text+0x4a3):CGetIP.cpp: unde reference to `InternetCloseHandle@4' c:/Programme/MinGW/bin/../lib/gcc-lib/mingw32/3.2.3/../../../libmingw32.a(m )(.text+0x97):main.c: undefined reference to `WinMain@16'Was fehlt denn jetzt noch? Wie kommt man den überhaupt daruaf das z.B. genau die Datei Ws2_32.lib gefehlt hat. Ich hätte das jetzt nie so gesehenn.
Matthias
-
Matthias147 schrieb:
Was fehlt denn jetzt noch?
die Library Wininet.lib...
Matthias147 schrieb:
Wie kommt man den überhaupt daruaf das z.B. genau die Datei Ws2_32.lib gefehlt hat. Ich hätte das jetzt nie so gesehenn.
in dem man genau die Doku liest, in diesem Falle (Wininet.Lib) steht dort in der MSDN zur Funktion InternetOpen:
http://msdn.microsoft.com/library/default.asp?url=/library/en-us/wininet/wininet/internetopen.asp
der entscheidende Hinweis ganz unten unter "Requirements".
MfG
-
Ich verstehe es nicht, aber es geht immer noch nicht:
$ g++ CGetIP.cpp WS2_32.Lib WinInet.Lib C:/DOKUME~1/MATTHI~1/LOKALE~1/Temp/ccG2baaa.o(.text+0x477):CGetIP.cpp: undefined reference to `InternetOpenA@20' C:/DOKUME~1/MATTHI~1/LOKALE~1/Temp/ccG2baaa.o(.text+0x4b1):CGetIP.cpp: undefined reference to `InternetConnectA@32' C:/DOKUME~1/MATTHI~1/LOKALE~1/Temp/ccG2baaa.o(.text+0x4f6):CGetIP.cpp: undefined reference to `HttpOpenRequestA@32' C:/DOKUME~1/MATTHI~1/LOKALE~1/Temp/ccG2baaa.o(.text+0x52f):CGetIP.cpp: undefined reference to `HttpSendRequestA@20' C:/DOKUME~1/MATTHI~1/LOKALE~1/Temp/ccG2baaa.o(.text+0x567):CGetIP.cpp: undefined reference to `InternetReadFile@16' C:/DOKUME~1/MATTHI~1/LOKALE~1/Temp/ccG2baaa.o(.text+0x63d):CGetIP.cpp: undefined reference to `InternetCloseHandle@4' C:/DOKUME~1/MATTHI~1/LOKALE~1/Temp/ccG2baaa.o(.text+0x657):CGetIP.cpp: undefined reference to `InternetCloseHandle@4' C:/DOKUME~1/MATTHI~1/LOKALE~1/Temp/ccG2baaa.o(.text+0x671):CGetIP.cpp: undefined reference to `InternetCloseHandle@4'aber warum???

wenn ich übrigens einen banalen Fehler einbaue wie Semikolon vergessen, bemängelt der nur diesen Fehler und sonst nichts, wenn aber ansonsten alles Korrekt ist, kommt die Meldung s.o.
Matthias
-
Ich kenne deinen Compiler bzw. deinen Linker nicht, aber bist du sicher, dass die Syntax für das Linken mehrerer Files so ist?!
Matthias147 schrieb:
wenn ich übrigens einen banalen Fehler einbaue wie Semikolon vergessen, bemängelt der nur diesen Fehler und sonst nichts, wenn aber ansonsten alles Korrekt ist, kommt die Meldung s.o.
Die Fehlermeldungen kommen vom Linken - gibt es beim Kompilieren schon Fehler macht er erst gar nicht soweit

-
Naja, sicher bin ich mir nicht, zumindest gehts so mit mehreren cpp files und bei der WS2_32.Lib hats die Meldungen auch schon mal reduziert.
Ich benutze den MinGW 3.
Wie sieht die Syntax den normalerweise aus? ich kanns ja mal probieren.
Matthias
-
Normalerweise ist gut

Ich hab z.B. Visual C++ - da übernimmt sowas die IDE für einen (also man muss nur die ganzen lib-Files hintereinanderhängen)Du kannst ja mal probieren, was passiert, wenn du die beiden lib-Files vertauscht. Wenn dann wieder die anderen Fehler kommen weißt du, dass die Syntax nicht stimmt in der du die File angibst. Kannst du die Anwendung nicht mit -? o.ä. aufrufen, damit die Parameter ausgegeben werden?
-
so, hab mal Versucht, die beiden Lib files zu vertauschen. Dann kommen immenoch dieselben Fehlermeldungen. Wenn ich aber die cpp Datei auch noch mit vertausche, kommen die alten Fehlermeldungen auch wieder dazu.
-? klappt irgendwie nicht.

-
evtl. auch /? o.ä. - gibt es denn keine Doku zu dem Compiler

-
der befehl für die kurzhilfe ist
g++ --helpbei mir macht er alles

g++.exe -c getip.cpp -o getip.o g++.exe -c main.cpp -o main.o g++.exe main.o getip.o -o "getip.exe" -lWs2_32 -lWininet Ausführung beendet Kompilierung erfolgreich@matthias
ich rate dir zu dev-cpp, somit hast du ne ide und den mingw als compiler[edit]
alles wieder geändert
-
yeah, so klappt es.
dev c++, werde ich mir doch wirklich wohl mal angucken müssen.
Vielen Dank
Matthias