Unrar Fonction (problème)

cs_Mave Messages postés 3 Date d'inscription mercredi 27 août 2003 Statut Membre Dernière intervention 15 avril 2004 - 15 avril 2004 à 01:25
GeNoX Messages postés 2 Date d'inscription vendredi 14 février 2003 Statut Membre Dernière intervention 20 février 2007 - 20 févr. 2007 à 06:48
Salut,
Je voudrais avoir une tite aide si c t possible... par rapport à un program de décompression de fichier rar.

Voila, donc ce que je voulais faire c'était unrar le fichier "E:\test.rar" dans un répertoir "e:\test". Ceci avec la dll:"unrar.dll"

Voici le programme :

#include <windows.h>

struct RARHeaderData
{
char ArcName[260];
char FileName[260];
UINT Flags;
UINT PackSize;
UINT UnpSize;
UINT HostOS;
UINT FileCRC;
UINT FileTime;
UINT UnpVer;
UINT Method;
UINT FileAttr;
char *CmtBuf;
UINT CmtBufSize;
UINT CmtSize;
UINT CmtState;
};

struct RAROpenArchiveData
{
char *ArcName;
UINT OpenMode;
UINT OpenResult;
char *CmtBuf;
UINT CmtBufSize;
UINT CmtSize;
UINT CmtState;
};

int APIENTRY WinMain (HINSTANCE hInst, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nCmdShow)
{
if (MessageBox(NULL, "Press OK to extract the test archive", "Decompress with unrar.dll sample", MB_OK | MB_ICONINFORMATION) == IDOK)
{
HINSTANCE hInstLibrary ;

char *ArcName ;
HANDLE hArcData ;
char CmtBuf[16384] ;
struct RARHeaderData HeaderData ;
struct RAROpenArchiveData OpenArchiveData ;

hInstLibrary = LoadLibrary ("unrar.dll") ;

ArcName = "e:\\test.rar";

OpenArchiveData.ArcName=ArcName ;
OpenArchiveData.CmtBuf=CmtBuf ;
OpenArchiveData.CmtBufSize=sizeof(CmtBuf) ;
OpenArchiveData.OpenMode=1 ;

hArcData=GetProcAddress(hInstLibrary, "RAROpenArchive") (&OpenArchiveData) ;
HeaderData.CmtBuf=NULL ;

while ((GetProcAddress(hInstLibrary, "RARReadHeader") (hArcData, &HeaderData))==0)
{
GetProcAddress(hInstLibrary, "RARProcessFile") (hArcData, 2, NULL, NULL) ;
}

GetProcAddress(hInstLibrary, "RARCloseArchive") (hArcData) ;

FreeLibrary(hInstLibrary) ;
}
return 1;
}

voila.... et donc mon problème se trouve sur toutes les lignes où se situe la commande 'GetProcAddress()'...
et il me donne un code erreur :
Unit1.cpp(78) : E2226 Extra parametre in call
Unit1.cpp(78) : E2034 Cannot convert 'int' to 'void *'

Si vous avez une id ou des réponses à mon prôbleme faites moi signe... ;)
merci d'avance.

2 réponses

cs_Mave Messages postés 3 Date d'inscription mercredi 27 août 2003 Statut Membre Dernière intervention 15 avril 2004
15 avril 2004 à 15:48
Bon ben merci kand même (lol),
g trouvé MES erreurs, en fait c'était simple....
Voila le code corrigé pour ceux, qui en aurai besoin :

//************************************************
#include <windows.h>

struct RARHeaderData
{
char ArcName[260];
char FileName[260];
UINT Flags;
UINT PackSize;
UINT UnpSize;
UINT HostOS;
UINT FileCRC;
UINT FileTime;
UINT UnpVer;
UINT Method;
UINT FileAttr;
char *CmtBuf;
UINT CmtBufSize;
UINT CmtSize;
UINT CmtState;
};

struct RAROpenArchiveData
{
char *ArcName;
UINT OpenMode;
UINT OpenResult;
char *CmtBuf;
UINT CmtBufSize;
UINT CmtSize;
UINT CmtState;
};

int TForm1::UnrarTest(char *ArcName, char *Defrep)
{
HINSTANCE hDll ;
// Définition de fonction du Dll
typedef HANDLE (WINAPI* OPENRAR)(struct RAROpenArchiveData *);
typedef UINT (WINAPI* READHEADERRAR)(HANDLE hArcData,struct RARHeaderData*);
typedef UINT (WINAPI* UNCOMPRESSEDRAR)(HANDLE hArcData,int iOperation, char* strDestPath, char* strDestName);
typedef UINT (WINAPI* CLOSERAR)(HANDLE hArcData);

char CmtBuf[16384] ;
// Référence aux structures pré-définie
struct RARHeaderData HeaderData ;
struct RAROpenArchiveData OpenArchiveData ;

// Chargement de la Dll
hDll = LoadLibrary("unrar.dll") ;
if(hDll == NULL)
{
UnrarLbl->Caption = "Veut pas ouvrir la dll";
return 0;
}

// Positionnement des données dans la structure RAROpenArchiveData
OpenArchiveData.ArcName=ArcName ;
OpenArchiveData.CmtBuf=CmtBuf ;
OpenArchiveData.CmtBufSize=sizeof(CmtBuf) ;
OpenArchiveData.OpenMode=1 ;

HANDLE hArcData;

// Chargement fonction Rar
OPENRAR _Openrar = (OPENRAR)GetProcAddress(hDll, "RAROpenArchive");
if(_Openrar == NULL)
{
UnrarLbl->Caption = "Veut pas ouvrire le fichier";
return 1;
}

READHEADERRAR _ReadHeaderRar = (READHEADERRAR)GetProcAddress(hDll, "RARReadHeader");
if(_ReadHeaderRar == NULL)
{
FreeLibrary(hDll); hDll = NULL;
UnrarLbl->Caption = "Erreur sur le header";
return 1;
}

UNCOMPRESSEDRAR _UnCompressedRar = (UNCOMPRESSEDRAR)GetProcAddress(hDll, "RARProcessFile");
if(_UnCompressedRar == NULL)
{
FreeLibrary(hDll); hDll = NULL;
UnrarLbl->Caption = "erreur sur le process";
return 1;
}

CLOSERAR _CloseRar = (CLOSERAR)GetProcAddress(hDll, "RARCloseArchive");

// Positionnement des données dans la structure RARHeaderData
HeaderData.CmtBuf=NULL ;

// Ouvertur du fichier rar
hArcData = _Openrar(&OpenArchiveData);

while (_ReadHeaderRar(hArcData, &HeaderData)==0)
{
// décompression du fichier rar dans le rep définie par Defrep
_UnCompressedRar(hArcData, 2, Defrep, "") ;
}

//Ferme le fichier RAR
_CloseRar(hArcData) ;

// Libere la mémoir du DLL
FreeLibrary(hDll) ;
}

Ps : ça a été fait avec c++ builder 6
0
GeNoX Messages postés 2 Date d'inscription vendredi 14 février 2003 Statut Membre Dernière intervention 20 février 2007
20 févr. 2007 à 06:48
Merci pour ton code.
C'est trés propre, j'ai pu l'utiliser avec Dev-C++
0
Rejoignez-nous