bzip2-Kompression via bz2.dll einbinden



  • Hi!

    Ich möchte ein Programm schreiben, für dass ich eine gute Kompression brauche, ich wollte also bzip2 einbinden (via dll)!
    Hier ist auch ein Beispiel dabei (im Source):
    http://gnuwin32.sourceforge.net/packages/bzip2.htm

    Wenn ich den Source dlltest.c kompilieren will, kommen immer einige Fehler und Warnungen, ich weiß aber nicht warum, vielleicht weil ich nicht VC++ verwende?

    Ich verwende wx-devcpp http://www.bluevisiontec.org/blueDocs/wx-devcpp.html !

    Weiß jemand, wie ich das Programm zum Laufenbekomm?

    MfG schne_re

    ⚠



  • das hier mitgesaugt?

    wie lautet(n) denn die fehlermeldung(en)?

    libs gelinkt? header includiert?

    mfg



  • Dieser Thread wurde von Moderator/in HumeSikkins aus dem Forum C++ in das Forum Compiler-Forum verschoben.

    Im Zweifelsfall bitte auch folgende Hinweise beachten:
    C/C++ Forum :: FAQ - Sonstiges :: Wohin mit meiner Frage?

    Dieses Posting wurde automatisch erzeugt.



  • Ich habs mit der dlltest.cpp ausprobiert, und den Code so belassen:

    /*
       minibz2
          libbz2.dll test program.
          by Yoshioka Tsuneo(QWF00133@nifty.ne.jp/tsuneo-y@is.aist-nara.ac.jp)
          This file is Public Domain.
          welcome any email to me.
    
       usage: minibz2 [-d] [-{1,2,..9}] [[srcfilename] destfilename]
    */
    
    #define BZ_IMPORT
    #include <stdio.h>
    #include <stdlib.h>
    #include "bzlib.h"
    #ifdef _WIN32
    #include <io.h>
    #endif
    
    #ifdef _WIN32
    
    #define BZ2_LIBNAME "libbz2-1.0.2.DLL" 
    
    #include <windows.h>
    static int BZ2DLLLoaded = 0;
    static HINSTANCE BZ2DLLhLib;
    int BZ2DLLLoadLibrary(void)
    {
       HINSTANCE hLib;
    
       if(BZ2DLLLoaded==1){return 0;}
       hLib=LoadLibrary(BZ2_LIBNAME);
       if(hLib == NULL){
          fprintf(stderr,"Can't load %s\n",BZ2_LIBNAME);
          return -1;
       }
       BZ2_bzlibVersion=GetProcAddress(hLib,"BZ2_bzlibVersion");
       BZ2_bzopen=GetProcAddress(hLib,"BZ2_bzopen");
       BZ2_bzdopen=GetProcAddress(hLib,"BZ2_bzdopen");
       BZ2_bzread=GetProcAddress(hLib,"BZ2_bzread");
       BZ2_bzwrite=GetProcAddress(hLib,"BZ2_bzwrite");
       BZ2_bzflush=GetProcAddress(hLib,"BZ2_bzflush");
       BZ2_bzclose=GetProcAddress(hLib,"BZ2_bzclose");
       BZ2_bzerror=GetProcAddress(hLib,"BZ2_bzerror");
    
       if (!BZ2_bzlibVersion || !BZ2_bzopen || !BZ2_bzdopen
           || !BZ2_bzread || !BZ2_bzwrite || !BZ2_bzflush
           || !BZ2_bzclose || !BZ2_bzerror) {
          fprintf(stderr,"GetProcAddress failed.\n");
          return -1;
       }
       BZ2DLLLoaded=1;
       BZ2DLLhLib=hLib;
       return 0;
    
    }
    int BZ2DLLFreeLibrary(void)
    {
       if(BZ2DLLLoaded==0){return 0;}
       FreeLibrary(BZ2DLLhLib);
       BZ2DLLLoaded=0;
    }
    #endif /* WIN32 */
    
    void usage(void)
    {
       puts("usage: minibz2 [-d] [-{1,2,..9}] [[srcfilename] destfilename]");
    }
    
    int main(int argc,char *argv[])
    {
       int decompress = 0;
       int level = 9;
       char *fn_r = NULL;
       char *fn_w = NULL;
    
    #ifdef _WIN32
       if(BZ2DLLLoadLibrary()<0){
          fprintf(stderr,"Loading of %s failed.  Giving up.\n", BZ2_LIBNAME);
          exit(1);
       }
       printf("Loading of %s succeeded.  Library version is %s.\n",
              BZ2_LIBNAME, BZ2_bzlibVersion() );
    #endif
       while(++argv,--argc){
          if(**argv =='-' || **argv=='/'){
             char *p;
    
             for(p=*argv+1;*p;p++){
                if(*p=='d'){
                   decompress = 1;
                }else if('1'<=*p && *p<='9'){
                   level = *p - '0';
                }else{
                   usage();
                   exit(1);
                }
             }
          }else{
             break;
          }
       }
       if(argc>=1){
          fn_r = *argv;
          argc--;argv++;
       }else{
          fn_r = NULL;
       }
       if(argc>=1){
          fn_w = *argv;
          argc--;argv++;
       }else{
          fn_w = NULL;
       }
       {
          int len;
          char buff[0x1000];
          char mode[10];
    
          if(decompress){
             BZFILE *BZ2fp_r = NULL;
             FILE *fp_w = NULL;
    
             if(fn_w){
                if((fp_w = fopen(fn_w,"wb"))==NULL){
                   printf("can't open [%s]\n",fn_w);
                   perror("reason:");
                   exit(1);
                }
             }else{
                fp_w = stdout;
             }
             if((fn_r == NULL && (BZ2fp_r = BZ2_bzdopen(fileno(stdin),"rb"))==NULL)
                || (fn_r != NULL && (BZ2fp_r = BZ2_bzopen(fn_r,"rb"))==NULL)){
                printf("can't bz2openstream\n");
                exit(1);
             }
             while((len=BZ2_bzread(BZ2fp_r,buff,0x1000))>0){
                fwrite(buff,1,len,fp_w);
             }
             BZ2_bzclose(BZ2fp_r);
             if(fp_w != stdout) fclose(fp_w);
          }else{
             BZFILE *BZ2fp_w = NULL;
             FILE *fp_r = NULL;
    
             if(fn_r){
                if((fp_r = fopen(fn_r,"rb"))==NULL){
                   printf("can't open [%s]\n",fn_r);
                   perror("reason:");
                   exit(1);
                }
             }else{
                fp_r = stdin;
             }
             mode[0]='w';
             mode[1] = '0' + level;
             mode[2] = '\0';
    
             if((fn_w == NULL && (BZ2fp_w = BZ2_bzdopen(fileno(stdout),mode))==NULL)
                || (fn_w !=NULL && (BZ2fp_w = BZ2_bzopen(fn_w,mode))==NULL)){
                printf("can't bz2openstream\n");
                exit(1);
             }
             while((len=fread(buff,1,0x1000,fp_r))>0){
                BZ2_bzwrite(BZ2fp_w,buff,len);
             }
             BZ2_bzclose(BZ2fp_w);
             if(fp_r!=stdin)fclose(fp_r);
          }
       }
    #ifdef _WIN32
       BZ2DLLFreeLibrary();
    #endif
       return 0;
    }
    

    Fehler beim Kompilieren mit wx-devcpp:

    D:\cpp\bzip2-1.0.3-1-src\src\bzip2\1.0.3\bzip2-1.0.3\dlltest.c In function `BZ2DLLLoadLibrary':
    37 D:\cpp\bzip2-1.0.3-1-src\src\bzip2\1.0.3\bzip2-1.0.3\dlltest.c invalid lvalue in assignment
    38 D:\cpp\bzip2-1.0.3-1-src\src\bzip2\1.0.3\bzip2-1.0.3\dlltest.c invalid lvalue in assignment
    ...
    und noch ein paar Warnungen!

    was heißt invalid lvalue in assignment? -> Der Datentyp stimmt ja,
    und laut bzip2-developer müsste das Ganze in VC++ funktionieren!

    MfG schne_re


Anmelden zum Antworten