Suche Hilfe bei DLL-Problem



  • Hallo zusammen,

    ich habe eine DLL zum Dekomprimieren von WinZip-Dateien geschrieben. Sie basiert auf XZIP.
    Mein Problem ist, dass beim Aufruf der Dekompress-Funktion immer eine Zugriffsverletzung auftritt.

    Ich hoffe, dass mir hier jemand helfen kann und bin euch für jeden Tipp dankbar!

    Der Code der DLL:

    #include "XZip.cpp"
    #include "XUnzip.cpp"
    
    #include "dll.h"
    #include "zip_dll.h"
    
    BOOL WINAPI LibMain(HINSTANCE hDllInst, DWORD fdwReason, LPVOID lpvReserved)
    {
      switch(fdwReason)
      {
        case DLL_PROCESS_ATTACH:
          break;
        case DLL_PROCESS_DETACH:
          break;
        case DLL_THREAD_ATTACH:
          break;
        case DLL_THREAD_DETACH:
          break;
      }
      return(TRUE);
    }
    
    DLLEXPORT HANDLE OpenZipArchive(PSTR sArchiveName,BOOL bCreate)
    {
      HANDLE hZip;
    
      hZip=OpenZip(sArchiveName,0,ZIP_FILENAME);
      if(hZip) return(hZip);
      else if(bCreate) return(CreateZip(sArchiveName,0,ZIP_FILENAME));
      else return(NULL);
    }
    
    DLLEXPORT DWORD ZipAddFile(HANDLE hZip,PSTR sFileName)
    {
      if(ZipAdd((HZIP)hZip,sFileName,sFileName,0,ZIP_FILENAME)!=ZR_OK) return(NULL);
      else return(1);
    }
    
    DLLEXPORT DWORD GetZipItemsCount(HANDLE hZip)
    {
      ZIPENTRY ze;
    
      GetZipItem((HZIP)hZip,-1,&ze);
      return(ze.index);
    }
    
    DLLEXPORT DWORD UnZipFile(HANDLE hZip,DWORD dwIndex)
    {
      ZIPENTRY *ze;
    
      ze=(ZIPENTRY*)malloc(sizeof(ZIPENTRY));
      if(GetZipItem((HZIP)hZip,dwIndex,&ze)==ZR_OK)
      {
        ze->name=(char*)malloc(256);
        strcpy(ze->name,"text.txt");
        if(UnzipItem((HZIP)hZip,dwIndex,"test.zip"/*ze->name*/,0,ZIP_FILENAME)!=ZR_OK) return(NULL);
        else return(1);
      }
      else return(NULL);
    }
    
    DLLEXPORT DWORD CloseArchive(HANDLE hZip)
    {
      CloseZip((HZIP)hZip);
    }
    


  • hallo,

    meist Du diese Zeile:
    ...
    if(GetZipItem((HZIP)hZip,dwIndex,&ze)==ZR_OK)
    ...

    ich kenne XZip nicht aber ich kann mir vorstellen, daß es nicht "&ze" sondern nur "ze" heißen muß. "ze" ist ja schon ein Zeiger.

    Oder statt
    ZIPENTRY *ze;
    besser
    ZIPENTRY ze;
    schreiben und dann aber "&ze" verwenden !

    mfg


Anmelden zum Antworten