GeoIP von MaxMind in VS
-
Hallo, hab versucht die GeoIP API von Maxmind in meion Programm einzubinden. Der Hersteller gibt nur eine Linux API mit sagt aber auch das es mit VS unter Windows laufen sollte. Die Windows Readme ist aber mehr als spährlich. Hat den jemand evtl schonmal damit gearbeitet unter VS und kann mir sagen wie ich die API installiere ?
Hier der link zum Hersteller http://www.maxmind.com/app/c
-
cUsername schrieb:
Der Hersteller gibt nur eine Linux API mit sagt aber auch das es mit VS unter Windows laufen sollte.
Mit Visual-Studio ist das sicher die letzten Jahre nie getestet worden. Habe gerade die
lib (libGeoIP.lib) nach etlichen Anpassungen mit VS2010 kompiliert.Hier ein paar Tipps dazu:
// #include <zlib.h> // gibts nicht unter Windows // #include <unistd.h> // gibts nicht unter Windows // Definition bei VS2010 nicht gefunden!! #if !defined(ssize_t) typedef long ssize_t; #endif // Definition nicht gefunden #define PACKAGE_VERSION 0 // ist normalerweise in unistd.h definiert ssize_t pread(int fd, void *buf, size_t count, off_t offset); ssize_t pwrite(int fd, const void *buf, size_t count, off_t offset); typedef void *voidp; // zconf.h typedef voidp gzFile; // zlib.h
Ich habe das meiste davon in global.h erweitert.
Seltsamerweise wird die zlib beim linken zum Schluss garnicht vermisst
Wenn doch könnte man hier weitersuchen
Zlib for Windows (http://gnuwin32.sourceforge.net/packages/zlib.htm) -> zlib-1.2.3-src.zip
-
Hi und vielen Dank für deine Mühe. Habs nun soweit hinbekommen, nur ein Problem bekomme ich gerade nicht hin.
Brauche ne Windows funktion zu
int pread(unsigned int fd, char *buf, size_t count, int offset)
Du hast ja auch nur den Prototyp angegeben, wie hast du das dann verlinkt ? Hab im Netz
int pread(unsigned int fd, char *buf, size_t count, int offset) { if (_lseek(fd, offset, SEEK_SET) != offset) { return -1; } return read(fd, buf, count); }
gefunden, damit bekomme ich aber immer Fehler beim lesen...
-
cUsername schrieb:
Du hast ja auch nur den Prototyp angegeben, wie hast du das dann verlinkt ?
garnicht. Für die lib war das nicht notwendig.
Da ich die lib ja schonmal habe habe ich das Testprogramm test-geoip.c mal in den Compiler geladen und meine lib damit gelinkt. Ausserdem noch die Ws2_32.lib
dazugepackt und als Basis den Code von dir. Läuft doch ?Hier nochmal das komplette Codefragment:
#include <sys\types.h> #include <stdio.h> #include <io.h> #include "..\..\libGeoIP\global.h" ssize_t pread(unsigned int fd, char *buf, size_t count, int offset) { if (_lseek(fd, offset, SEEK_SET) != offset) { return -1; } return read(fd, buf, count); }
cUsername schrieb:
Code ... gefunden, damit bekomme ich aber immer Fehler beim lesen...
Das wird wohl an den Pfaden liegen die zum Öffnen der Dateien notwendig sind.
Ich habe der Einfachheit halber absolute Pfade eingesetzt. ZB:
gi = GeoIP_open("D:/source/GeoIP_Maxmind/GeoIP-1.4.8/data/GeoIP.dat", GEOIP_STANDARD | GEOIP_CHECK_CACHE);
oder
f = fopen("D:/source/GeoIP_Maxmind/GeoIP-1.4.8/test/country_test.txt","r");
Ansonsten wird die Datenbank vermutlich entweder im Verzeichnis der exe oder im Projektordner (je nach Aufruf) gesucht.
-
Ne der fehler kommt nicht beim öffnen sondern beim lesen fopen haut hin. Ich schaus mir nochmal in ruhe an und melde mich ggf nochmal. Danke nochmal