begin process at 2012 05 29 06:28:42
  Trouver un code source :
 
dans
 
Accueil > Forum > 

Archive C/C++

 > 

Archives

 > 

Au secours

 > 

UNRAR.DLL sous Borland C++ Builder


Derniers messages déposésPoser une question dans le forum ou lancer une discussion

UNRAR.DLL sous Borland C++ Builder

mercredi 8 octobre 2003 à 10:53:35 | UNRAR.DLL sous Borland C++ Builder

bdkiller





Bonjour tout le monde!

S'il vous plaît, dites moi comment s'en servir de UNRAR.DLL sous Borland C++ Builder.

J'ai trouvé UNRAR.DLL avec ces codes sources ici:
[ Lien ]

L'exemple pour C est une console 32-bit. Mais vu que je suis newbie, je ne comprends pas trop et donc j'ai du mal a me servir du code source.

Est-ce qu'il y aurait une gentille âme pour me faire un petit src en utilisant les fichiers qui sont sur le site cité plus haut?
du genre (par la logique):

Si Archive "blabla.rar" existe
extraire dans Edit1(GetText);


Je vous remercie énormement à l'avance.
jeudi 9 octobre 2003 à 10:56:52 | C'est bon, merci. J'ai plus besoin :)

bdkiller


Rebonjour tlm. C'est bon j'ai trouvé ce qu'il me fallait :) carrement un composant et une source :) c'est la source qu'il me fallait, ben pour ceux qui veulent la voir, la voilà:


//---------------------------------------------------------------------------
#include <vcl\vcl.h>
#pragma hdrstop

#include "UnRar.h"
#include "urar.h"

#ifdef UNRAR_smartinit
#pragma package(smart_init)
#endif

UNRAR_dcr // use resource ivory.dcr

int ProcessChangeVol(char* ArcName, int Name);

AnsiString TUnRar::ChangeDiskTitle = String("Insert new disk");
Forms::TModalResult TUnRar::ChangeDiskModalResult = mrNone;

//---------------------------------------------------------------------------
static inline TUnRar* ValidCtrCheck()
{
return new TUnRar(NULL);
}
//---------------------------------------------------------------------------
String __fastcall EUnRarError::GetErrString(TResult res)
{
if(res == resNoMemory) return "Not enough memory";
else if(res == resBadData) return "Bad data";
else if(res == resBadArchive) return "Bad archive";
else if(res == resOpenError) return "Open error";
else if(res == resEndOfFile) return "End of file";
else if(res == resCloseError) return "Close error";
else if(res == resCreateError) return "Create error";
else if(res == resReadError) return "Read error";
else if(res == resWriteError) return "Write error";
else if(res == resUnknownFormat) return "Unknown file format";
else if(res == resDllError) return "Couldn't open UNRAR.DLL";
else return "Unknown error";
}
//---------------------------------------------------------------------------
__fastcall TUnRar::TUnRar(Classes::TComponent* AOwner)
: TComponent(AOwner),
fEof(true), fResult(resNone), fArchiveCommentState(csNone),
fArchiveName(""), fArchiveComment(""), fHandle(NULL), fDestPath(""), fPassword(""),
fFileName(""), fExtract(false), fComment(""), fCommentState(csNone), fDictionarySize(0),
fActive(false), hDll(NULL), fExceptionOnError(true)
{
}
//---------------------------------------------------------------------------
__fastcall TUnRar::~TUnRar()
{
if(fIsOpen) Close();
if(hDll != NULL) FreeLibrary(hDll);
}
//---------------------------------------------------------------------------
bool __fastcall TUnRar::Open()//AnsiString filename, bool extract)
{
if(fActive)
{
fResult = resOpenError;
if(fExceptionOnError) throw EUnRarError(fResult);
return false;
}

hDll = LoadLibrary("UNRAR");
if(hDll == NULL)
{
fResult = resDllError;
if(fExceptionOnError) throw EUnRarError(fResult);
return false;
}

PROCUnRarOpen _RAROpenArchive = (PROCUnRarOpen)GetProcAddress(hDll, "RAROpenArchive");
if(_RAROpenArchive == NULL)
{
fResult = resDllError;
if(fExceptionOnError) throw EUnRarError(fResult);
return false;
}

PROCUnRarSetPassword _RARSetPassword = (PROCUnRarSetPassword)GetProcAddress(hDll, "RARSetPassword");
if(_RARSetPassword == NULL)
{
fResult = resDllError;
if(fExceptionOnError) throw EUnRarError(fResult);
return false;
}

PROCUnRarSetChangeVolProc _RARSetChangeVolProc = (PROCUnRarSetChangeVolProc)GetProcAddress(hDll, "RARSetChangeVolProc");
if(_RARSetChangeVolProc == NULL)
{
fResult = resDllError;
if(fExceptionOnError) throw EUnRarError(fResult);
return false;
}

RAROpenArchiveData _OpenData;
char* _comment = new char[65536];

// fArchiveName = filename;
_OpenData.ArcName = fArchiveName.c_str();
_OpenData.OpenMode = fExtract ? RAR_OM_EXTRACT : RAR_OM_LIST;
_OpenData.CmtBuf = _comment;
_OpenData.CmtBufSize = 65536;
fResult = resOpenError;
fHandle = _RAROpenArchive(&_OpenData);
fArchiveComment = _comment;
delete _comment;
switch(_OpenData.OpenResult)
{
case 0: fResult = resOk; break;
case ERAR_NO_MEMORY: fResult = resNoMemory; break;
case ERAR_BAD_DATA: fResult = resBadData; break;
case ERAR_BAD_ARCHIVE: fResult = resBadArchive; break;
case ERAR_EOPEN: fResult = resOpenError; break;
}
switch(_OpenData.CmtState)
{
case 0: fArchiveCommentState = csNone; break;
case 1: fArchiveCommentState = csOk; break;
case ERAR_NO_MEMORY: fArchiveCommentState = csNoMemory; break;
case ERAR_BAD_DATA: fArchiveCommentState = csBadData; break;
case ERAR_UNKNOWN_FORMAT: fArchiveCommentState = csUnknownFormat; break;
}
if(fHandle!=NULL)
{
fEof = false;
fActive = true;
if(fPassword!="") _RARSetPassword(fHandle, fPassword.c_str());
_RARSetChangeVolProc(fHandle, ProcessChangeVol);
return ReadHeader();
}
else
{
fEof = true;
fActive = false;
if(fExceptionOnError) throw EUnRarError(fResult);
return false;
}
}
//---------------------------------------------------------------------------
bool __fastcall TUnRar::Close()
{
if(!fActive)
{
fResult = resCloseError;
if(fExceptionOnError) throw EUnRarError(fResult);
return false;
}

fActive = false;
fEof = true;

PROCUnRarClose _RARCloseArchive = (PROCUnRarClose)GetProcAddress(hDll, "RARCloseArchive");
if(_RARCloseArchive == NULL)
{
FreeLibrary(hDll); hDll = NULL;
fResult = resDllError;
if(fExceptionOnError) throw EUnRarError(fResult);
return false;
}

if(_RARCloseArchive(fHandle)==0)
{
FreeLibrary(hDll); hDll = NULL;
fResult = resOk;
return true;
}
else
{
FreeLibrary(hDll); hDll = NULL;
fResult = resCloseError;
if(fExceptionOnError) throw EUnRarError(fResult);
}

return false;
}
//---------------------------------------------------------------------------
bool __fastcall TUnRar::ReadHeader()
{
if(!fActive)
{
fResult = resOpenError;
if(fExceptionOnError) throw EUnRarError(fResult);
return false;
}
/* if(fEof)
{
fResult = resEndOfFile;
// throw EUnRarError(fResult);
return false;
}*/

PROCUnRarHeader _RARReadHeader = (PROCUnRarHeader)GetProcAddress(hDll, "RARReadHeader");
if(_RARReadHeader == NULL)
{
FreeLibrary(hDll); hDll = NULL;
fResult = resDllError;
if(fExceptionOnError) throw EUnRarError(fResult);
return false;
}

RARHeaderData _HeaderData;
char* _comment = new char[65536];
int retval;

_HeaderData.CmtBuf = _comment;
_HeaderData.CmtBufSize = 65536;
retval = _RARReadHeader(fHandle, &_HeaderData);

if(retval==0)
{
fResult = resOk;
fArchiveName = _HeaderData.ArcName;
fFileName = _HeaderData.FileName;
fFlags.Clear();
unsigned f = _HeaderData.Flags, ds = f & 0xE0;
if(f & 0x01) fFlags = fFlags << ffPrevVolume;
if(f & 0x02) fFlags = fFlags << ffNextVolume;
if(f & 0x04) fFlags = fFlags << ffPassword;
if(f & 0x08) fFlags = fFlags << ffComment;
if(f & 0x10) fFlags = fFlags << ffSolid;
if(ds==0xE0) { fFlags = fFlags << ffDirectory; fDictionarySize = 0; }
else if(ds==0) fDictionarySize = 64;
else if(ds==0x20) fDictionarySize = 128;
else if(ds==0x40) fDictionarySize = 256;
else if(ds==0x60) fDictionarySize = 512;
else if(ds==0x80) fDictionarySize = 1024;
else fDictionarySize = 0;
fPackedSize = _HeaderData.PackSize;
fUnpackedSize = _HeaderData.UnpSize;
switch(_HeaderData.HostOS)
{
case 0: fHostOS = hosMsDos; break;
case 1: fHostOS = hosOS2; break;
case 2: fHostOS = hosWin32; break;
case 3: fHostOS = hosUnix; break;
}
fCRC = _HeaderData.FileCRC;
fFileTime = _HeaderData.FileTime;
fRarVersion = _HeaderData.UnpVer;
fMethod = _HeaderData.Method;
fAttr = _HeaderData.FileAttr;
switch(_HeaderData.CmtState)
{
case 0: fCommentState = csNone; break;
case 1: fCommentState = csOk; break;
case ERAR_NO_MEMORY: fCommentState = csNoMemory; break;
case ERAR_BAD_DATA: fCommentState = csBadData; break;
case ERAR_UNKNOWN_FORMAT: fCommentState = csUnknownFormat; break;
}
fComment = _comment;
delete _comment;
return true;
}
else if(retval==ERAR_END_ARCHIVE)
{
delete _comment;
fResult = resEndOfFile;
fEof = true;
}
else
{
delete _comment;
fResult = resBadData;
throw EUnRarError(fResult);
}
return false;
}
//---------------------------------------------------------------------------
bool __fastcall TUnRar::Process(TRarOperation op, AnsiString DestName)
{
if(!fActive)
{
fResult = resOpenError;
if(fExceptionOnError) throw EUnRarError(fResult);
return false;
}
if(fEof)
{
fResult = resEndOfFile;
return false;
}

PROCUnRarProcess _RARProcessFile = (PROCUnRarProcess)GetProcAddress(hDll, "RARProcessFile");
if(_RARProcessFile == NULL)
{
FreeLibrary(hDll); hDll = NULL;
fResult = resDllError;
if(fExceptionOnError) throw EUnRarError(fResult);
return false;
}

int operation;
switch(op)
{
case opSkip: operation = RAR_SKIP; break;
case opTest: operation = RAR_TEST; break;
case opExtract: operation = RAR_EXTRACT; break;
}
char* destpath = (fDestPath=="") ? NULL : fDestPath.c_str();
char* destname = (DestName=="") ? NULL : DestName.c_str();
int retval = _RARProcessFile(fHandle, operation, destpath, destname);

switch(retval)
{
case 0: return ReadHeader();
case ERAR_BAD_DATA: fResult = resBadData; break;
case ERAR_BAD_ARCHIVE: fResult = resBadArchive; break;
case ERAR_UNKNOWN_FORMAT: fResult = resUnknownFormat; break;
case ERAR_EOPEN: fResult = resOpenError; break; // volume open error
case ERAR_ECREATE: fResult = resCreateError; break;
case ERAR_ECLOSE: fResult = resCloseError; break;
case ERAR_EREAD: fResult = resReadError; break;
case ERAR_EWRITE: fResult = resWriteError; break;
}
if(fExceptionOnError) throw EUnRarError(fResult);
return false;
}
//---------------------------------------------------------------------------
void __fastcall TUnRar::SetPassword(AnsiString s)
{
fPassword=s;
if(fActive)
{
PROCUnRarSetPassword _RARSetPassword = (PROCUnRarSetPassword)GetProcAddress(hDll, "RARSetPassword");
if(_RARSetPassword != NULL)
_RARSetPassword(fHandle, s.c_str());
}
}
//---------------------------------------------------------------------------
void __fastcall TUnRar::SetActive(bool active)
{
if(active) Open(); else Close();
}
//---------------------------------------------------------------------------
int ProcessChangeVol(char* ArcName, int Mode)
{
int retval = true;
if(Mode==RAR_VOL_ASK)
{
TOpenDialog* OpenDialog = new TOpenDialog(NULL);
OpenDialog->Title = TUnRar::ChangeDiskTitle;
OpenDialog->FileName = ArcName;
if(OpenDialog->Execute())
{
delete [] ArcName;
ArcName = new char[OpenDialog->FileName.Length()+1];
strcpy(ArcName, OpenDialog->FileName.c_str());
retval = true;
TUnRar::ChangeDiskModalResult = mrOk;
}
else
{
retval = false;
TUnRar::ChangeDiskModalResult = mrCancel;
}
delete OpenDialog;
}
return retval;
}
//---------------------------------------------------------------------------
namespace Unrar
{
void __fastcall UNRAR_package Register()
{
TComponentClass classes[1] = { __classid(TUnRar) };
RegisterComponents("Samples", classes, 0);
}
}
//---------------------------------------------------------------------------




Cette discussion est classée dans : dll, builder, borland, unrar, rar


Répondre à ce message

Sujets en rapport avec ce message

Créé une DLL avec Borland C++ Builder [ par Fuckly94 ] Je narrive pas a créé une DLL sur borland!!J'aimerais avoir une aide si possible.et si vous pourriez me donner un exemple avec une explication,ce sera dll [ par zincben ] bonjour je travaille sur le portage de plusieurs appli 16bits en 32 bits et j'ai un petit probleme. On m'a donné une dll à passer en 32 bits. Elle est Problème de création de dll !! (C++ Builder) [ par SibosisITS ] J'ai la procédure d'entrée de la dll, j'ai écris mes fonctions, mais là ou je coince, c'est pour les arguments à mettre dans l'en-tête de mes fonction Dll avec c++ builder 6 [ par sebastienbro ] J'aimerais savoir comment exporter une fonction dans une DLL, et en même temp, comment importer une fonction ?merci MultiThread sur Borland C++ Builder [ par aldubas ] Bonjour,Quelqu'un c'est-il s'il est possible de faire tourner une application Builder et un algo dans deux threads de type Tthread dans Builder .Merci Accéder a la carte son sous borland c++ builder [ par grossefonc ] Bonjour,Je souhaite pouvoir générer du son genre une sinusoïde ou un signal quelconque avec la carte son. (le but n'est pas de jouer un fichier son st Help pour un debutant sur Borland Builder C++ 5.0 [ par mrwalm ] Salutation a tous,Je debute en programmation (depuis bientot 2 ans), et là, je lutte a mort sur 2 points:1- je voudrai sauvegarder des données ( AnsiS Borland C++ Builder [ par Nico5779 ] Quelqu un pourrait me dire ou trouver (gratuitement)C++ Builder mais pas celui en mode console pour win ou fo taper les truc style compile unfichier.c Gestion de la souris sous Borland c++Builder [ par Thanatos ] Bonjour,Quelqu'un connaitrait-il la façon d'utiliser la souris ( gestion de la position et des clics) sous Borland C++Builder 5.5 ? Et quelles librair Exportation de données access depuis borland c++ builder [ par sebastien ] Bonjour, je suis étudiant (débutant en informatique) et dans le cadre de mon cours d'informatique je dois réaliser une petite application Base de donn


Nos sponsors


Sondage...

CalendriCode

Mai 2012
LMMJVSD
 123456
78910111213
14151617181920
21222324252627
28293031   

Consulter la suite du CalendriCode

Photothèque

A découvrir



 
Développement réalisé par Nicolas SOREL (Nix) avec l'aide de : Cyril DURAND et Emmanuel (EBArtSoft), Merci à Vincent pour ses précieux conseils.
CodeS-SourceS.com© Toute reproduction même partielle est interdite sauf accord écrit du Webmaster
CodeS-SourceS.com© est une marque déposée tous droits réservés

Google Coop CodeS-SourceS Google Coop CodeS-SourceS
Temps d'éxécution de la page : 1,326 sec (3)

Nous contacter | Annoncer sur CodeS-SourceS | Mentions légales