Was'n das für 'ne Methode???



  • Hallo!

    kann mir bitte jemand erklären was dies für eine Art ist eine Methode zu schreiben?

    Habe sie aus "ZLIB". www.zlib.org

    Ich komme nicht mit dem Kram hinter der Klammer des Methodenkopfes klar.
    Hab ich noch nie gesehen...geschweige denn beigebracht bekommen.

    void test_dict_inflate(compr, comprLen, uncompr, uncomprLen)
        Byte *compr, *uncompr;
        uLong comprLen, uncomprLen;
    {
        int err;
        z_stream d_stream; /* decompression stream */
    
        strcpy((char*)uncompr, "garbage");
    
        d_stream.zalloc = (alloc_func)0;
        d_stream.zfree = (free_func)0;
        d_stream.opaque = (voidpf)0;
    
        d_stream.next_in  = compr;
        d_stream.avail_in = (uInt)comprLen;
    
        err = inflateInit(&d_stream);
        CHECK_ERR(err, "inflateInit");
    
        d_stream.next_out = uncompr;
        d_stream.avail_out = (uInt)uncomprLen;
    
        for (;;) {
            err = inflate(&d_stream, Z_NO_FLUSH);
            if (err == Z_STREAM_END) break;
    	if (err == Z_NEED_DICT) {
    	    if (d_stream.adler != dictId) {
    		fprintf(stderr, "unexpected dictionary");
    		exit(1);
    	    }
    	    err = inflateSetDictionary(&d_stream, (const Bytef*)dictionary,
    				       sizeof(dictionary));
    	}
            CHECK_ERR(err, "inflate with dict");
        }
    
        err = inflateEnd(&d_stream);
        CHECK_ERR(err, "inflateEnd");
    
        if (strcmp((char*)uncompr, hello)) {
            fprintf(stderr, "bad inflate with dict\n");
    	exit(1);
        } else {
            printf("inflate with dictionary: %s\n", (char *)uncompr);
        }
    }
    

    Und hier noch ein Prototyp eigenartiger Art:

    ZEXTERN int ZEXPORT inflate OF((z_streamp strm, int flush));
    

    möchte ich einen derartigen Prototyp in meinen Klassen einbinden so bekomme ich immer die Fehlermeldung, dass dies nicht zulässig ist.
    Dann begrenze ich ihn einfach und es klappt trotzdem...glaub ich (läuft scheinbar)!

    int inflate (z_streamp strm, int flush);
    

    Ist das was ich mache OK oder muss ich die Methoden so belassen und nicht über den Wizard einbinden sondern von Hand???

    Und wenn zufällig jemand die ZLIB kennt so würde ich gerne wissen wofür die Methoden "compress, inflate und deflate" sind.
    Sind "compress" und "deflate" nicht das selbe??

    Gruss
    Günni



  • das oberste ist so n komischer style, mit dem man gaaaaanz früher, also noch vor dem ersten c-standard, funktionen gebaut hat. keine ahnung, ob das heutige compiler überhaupt noch schlucken, aber ich denke mal nicht. naja, beim zweiten hab ich echt keinen blassen schimmer.



  • Das ist C nach Kernighan&Ritchie, also 70er/80er-Jahre-Stil. Vor der Einführung von ANSI-C (1989). Ich weiß gar nicht, ob das in C noch legal ist, in C++ jedoch auf keinen Fall.

    /* ANSI-C */
    int funktion(int a, char* b) {
     ...
    }
    
    /* schreibt man in K&R-C so: */
    funktion(a, b)
      char *b; {
     ... }
    /* wenn nichts angegeben ist, wird stets int angenommen, hier
       für den Rückgabetyp und für den Parameter a */
    

    Der Prototyp da unten ist auch aus diesem Grund so geschrieben. K&R kennt überhaupt keine Prototypen. Eine Funktion wird immer irgendwie so deklariert:

    int funktion();
    /* aber nie so:
       int funktion(int a, char* b) */
    

    Das Makro OF wird also geeignet definiert, um die Argumentliste bei Bedarf auszublenden.

    Warum willst du die zlib in deine Klasse einbinden? Normalerweise wird die extern compiliert und dazugelinkt. Die Header müssten auch C++-tauglich sein, wenn es die Implementation schon nicht ist.

    Zu compress vs. deflate ... das sind meines Wissens verschiedene Kompressionsalgorithmen.



  • hmmmmmmmmm...................

    danke erstmal fuer eure antworten...ihr habt schonmal viel klar gemacht!

    aber dieser code ist ja aus dem originalen zlib und läuft unter c++ (pocketpc)

    alles irgendwie eigenartig

    warum ich die zlib in meiner klasse haben will?? ich weiss es nicht!!

    ich bin momentan voll durch'n wind...sehr verwirrt....

    die zlib ist mir irgendwie zu kompliziert
    ich will doch nur meine bitmaps zippen und sie dann verschicken

    vielleicht koennt ihr mir helfen wie ich die zlib anstaendig in mein programm integriere oder von dort anspreche

    leider weiss ich nicht wie ich mein bitmap da durch die compress jage

    ich raffs einfach nicht und ich hab schon sooo viel probiert!!!!!

    gruss
    Günni



  • Du compilierst die zlib als separates Projekt (statische Bibliothek). Dann nimmst du dein C++-Projekt her und bindest diese dort ein. Wenn du dann den passenden Header (zlib.h?) includierst, kannst du auf die Funktionen der zlib zugreifen.
    Steht so bestimmt auch in der Doku ...



  • 😃 wir reden voll aneinander vorbei...und es liegt wohl an mir!!

    ich habe zugriff auf die funktionen indem ich die lib "eingebunden" habe...

    ...leider weiss ich mit dehnen nix anzufangen, da sie nicht gerade unkompliziert sind

    ich hoffte jemand koenne mir sagen wie ich mein bitmap an die richtigen methoden uebergebe um dann anschliessend die gezippte datei auf der festplatte abzuholen

    gruss
    guenni



  • Hast du es schonmal mit der Dokumentation versucht?



  • ja, ich schon ... doch leider der ersteller der zlib nicht unbedingt

    da is so gut wie nix dokumentiert im code
    und mit den jeweils 3 saetzen in der zlib.h komm ich nicht weiter

    aber uns hat mittlerweile ein supercoder fzúer pocketpc weitergeholfen und mal ein wenig?! die inflate und deflate methoden umgestellt und paar tipps gegeben

    nun raffen wir auch den code und wofuer die einzelnen methoden gut sind

    so waren wir bisher immer der annahme wir muessten die compress nutzen doch diese ist fuer uns total ueberfluessig

    und das beispielprogramm welches mitgeliefert wird ist als beispiel eher eine blamage (bin dennoch dem erzeuger von zlib sehr dankbar)

    dennoch danke fuer deine tipps..

    Gruss
    Günni



  • Mal ganz ehrlich: die Doku könnte zwar besser sein, aber sie ist doch vollkommen ausreichend.

    Das einzige was fehlt sind Beispiele - aber jede Funktion ist doch mit einer handvall Sätzen erklärt.

    Also ich hatte damit keine Probleme...


Anmelden zum Antworten