Stagiaire WDF   
  	  	 
  	  	Inscrit: 05/07/2003 18:06 
  	  	De Lyon (69) 
  		  	Post(s): 28 
  	  			 | 
    
     Bonjour,
  Mon objectif est de faire un composant permettant de décompresser des archives rar. J'ai récupéré quelques ressources en vb interressantes sur le sujet.
  Mais malheureusement, je reste toujours bloqué sur un problème système lorsque j'appelle la fonction "RARReadHeader".
  Je suppose que le problème est situé au niveau de la déclaration des membres "ArcName" et "FileName" du type "RARHeaderData", par contre je ne sais pas comment résoudre ce problème.
  Peut être que quelqu'un ayant plus d'expérience sur l'incorporation d'appels de dll avec des types complexes dans WD saura m'aider à comprendre ce problème ou à me fournir une piste.
  L'objectif final de mon composant étant de fournir des fonctions de décompression pour rar,zip,cab et ace.
  Vous trouverez en fin de messages les codes utilisés ainsi que la copie de l'erreur système.
  Merci d'avance.
  ------------------------------------------------------------ //Code de la fonction principale: FONCTION ExtraitRAR(sFichier est une chaîne, sOutDir est une chaîne, sPwd est une chaîne) //CREATION : 20060910 15021673 //VARIABLES bRes est un booléen OpArch est RAROpenArchiveData HeadRAR est RARHeaderData HandleRAR est un entier sur 8 octets HeaderLine est un entier sur 8 octets exeUNRAR est un entier sur 8 octets //CODE bRes = Faux OpArch:ArcName = sFichier OpArch:CmtBuf = Répète(" ",16384) OpArch:CmtBufSize = 16384 OpArch:OpenMode = 1 HandleRAR = _RAROpenArchive(&OpArch) SI OpArch:OpenResult <> 0 ALORS RENVOYER bRes SI sPwd <> "" ALORS _RARSetPassword( HandleRAR, sPwd) bRes = Vrai HeaderLine = _RARReadHeader(HandleRAR, &HeadRAR) TANTQUE (HeaderLine <> 0) 	Multitâche(-1) 	HeaderLine = _RARReadHeader(HandleRAR, &HeadRAR) FIN //	 _RARCloseArchive(HandleRAR) RENVOYER bRes
  //Code de la fonction Header en WD10 FONCTION PRIVÉ _RARReadHeader(HandleRAR, HeadRAR) RENVOYER AppelDLL32("UnRAR.dll","RARReadHeader",HandleRAR, HeadRAR) //Private Declare Function RARReadHeader Lib "UnRAR.dll" (ByVal hArcData As Long, ByRef HeaderData As RARHeaderData) As Long //Ma déclaration en WD10 RARHeaderData est une structure 	ArcName est une chaîne ASCIIZ sur 260 	FileName est une chaîne ASCIIZ sur 260 	nFlags  est un entier sur 8 octets  	nPackSize  est un entier sur 8 octets 	nUnpSize  est un entier sur 8 octets 	nHostOS  est un entier sur 8 octets 	nFileCRC  est un entier sur 8 octets 	nFileTime  est un entier sur 8 octets 	nUnpVer  est un entier sur 8 octets 	nMethod  est un entier sur 8 octets 	nFileAttr  est un entier sur 8 octets 	CmtBuf  est une chaîne 	nCmtBufSize  est un entier sur 8 octets 	nCmtSize  est un entier sur 8 octets 	nCmtState  est un entier sur 8 octets FIN
  //Déclaration VB Private Type RARHeaderData     ArcName As String * 260     FileName As String * 260     flags As Long     PackSize As Long     UnpSize As Long     HostOS As Long     FileCRC As Long     FileTime As Long     UnpVer As Long     Method As Long     FileAttr As Long     CmtBuf As String     CmtBufSize As Long     CmtSize As Long     CmtState As Long End Type
  //Déclaration doc de Unrar ==================================================================== int PASCAL RARReadHeader(HANDLE hArcData,                          struct RARHeaderData *HeaderData) ==================================================================== Description ~~~~~~~~~~~   Read header of file in archive. Parameters ~~~~~~~~~~ hArcData   This parameter should contain the archive handle obtained from the RAROpenArchive function call. HeaderData   It should point to RARHeaderData structure: 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; };
  //Erreur système  Erreur à la ligne 19 du traitement Procédure globale _RARReadHeader. Vous avez appelé la fonction AppelDLL32. Une erreur système inattendue est survenue. Si cet incident se produit de manière systématique lorsque vous exécutez les mêmes manipulations, il est conseillé de transmettre au Support Technique Gratuit :  - une description des circonstances de l'incident  - les lignes de code, une fenêtre ou un projet permettant de reproduire le problème  - les informations techniques suivantes Détails techniques :
  Module : UnRAR.dll Adresse de base : 01210000 Erreur système : Access violation (GPF) EIP = 01213147 OS : Windows XP ou .NET Service Pack 2(5.1.2600)
  Informations techniques
  Projet : XtrACT
  Dump de l'erreur du module <WD100VM.DLL> <10.01Bs>.
  - Appel WL : Traitement de <PG_XtrACT_RAR._RARReadHeader>, ligne <19>, thread <0> Fonction <AppelDLL32>, n° de syntaxe <0>
  - Niveau : erreur fatale (EL_FATAL)
  - Code erreur : 1020
  - Code erreur WD55 : 0
  - Pas de code d'erreur système
  - Pas de message d'erreur système
  - Que s'est-il passé ? Une erreur système inattendue est survenue. Si cet incident se produit de manière systématique lorsque vous exécutez les mêmes manipulations, il est conseillé de transmettre au Support Technique Gratuit :  - une description des circonstances de l'incident  - les lignes de code, une fenêtre ou un projet permettant de reproduire le problème  - les informations techniques suivantes
  Détails techniques :
  Module : UnRAR.dll Adresse de base : 01210000 Erreur système : Access violation (GPF) EIP = 01213147 OS : Windows XP ou .NET Service Pack 2(5.1.2600)
  - Infos de debug : Registres :
    EIP = 01213147    EBP = 0013EC3C   EAX = 00000000    EBX = 0000502C   ECX = FFFFFFFF    EDX = 0013DBB0   ESI = 0000502C    EDI = 0000502C
  Pile des appels :
  [UnRAR.dll (01210000)]	01213147
  Fonction (0,18)
  - Infos attachées : EIT_DATEHEURE : 10/09/2006 16:43:41 EIT_PILEWL : Procédure globale _RARReadHeader (PG_XtrACT_RAR._RARReadHeader), ligne 19 Procédure globale ExtraitRAR (PG_XtrACT_RAR.ExtraitRAR), ligne 35 Clic sur BTN_Test_RAR (FEN_Test.BTN_Test_RAR), ligne 3
  - Identifiant dans le .err : 1020 
	     
    
	    Contribution le : 10/09/2006 17:04 
		 |