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
|