Extraction d'une ressource

browser64 Messages postés 112 Date d'inscription dimanche 24 avril 2005 Statut Membre Dernière intervention 5 décembre 2010 - 14 janv. 2009 à 14:33
cs_Jack Messages postés 14007 Date d'inscription samedi 29 décembre 2001 Statut Modérateur Dernière intervention 28 août 2015 - 15 janv. 2009 à 17:13
Bonjour a tous,


Sur le code ci-dessous j'utilise un fichier .res (ressource) qui contient un executable d'une taille de 1 117 709 octets.


Au lancement de mon code mon executable se place bien dans c:\USB 2 CABLE.exe, mais au lieu de faire sa taille de 1 117 709 octets il fait 1 117 724 octets, bref apres son extraction du .res celui-ci se retrouve corrompu, je comprends pas car ma ressource est parfaitement faite.  


Je n'arrive pas a trouver la cause du problème , ou se trouve l'erreur dans mon code ?


Merci


 


Private Sub Form_Load()
aBuffer = LoadResData(1, "1")
FF = FreeFile
Open "c:\USB 2 CABLE.exe" For Binary Access Write As #FF
Put #FF, , aBuffer
Close #FF
Erase aBuffer
End Sub

11 réponses

cs_Jack Messages postés 14007 Date d'inscription samedi 29 décembre 2001 Statut Modérateur Dernière intervention 28 août 2015 78
14 janv. 2009 à 14:43
Salut
Ton code parait correct
Manque peut-être une déclaration propre du tableau de byte (sinon Variant = burk)
   Dim aBuffer() As Byte

Vala
Jack, MVP VB
NB : Je ne répondrai pas aux messages privés

<hr />Le savoir est la seule matière qui s'accroit quand on la partage (Socrate)
0
cs_Jack Messages postés 14007 Date d'inscription samedi 29 décembre 2001 Statut Modérateur Dernière intervention 28 août 2015 78
14 janv. 2009 à 14:46
PS : Le type du LoadResData : Mieux vaut utiliser le vrai texte "CUSTOM" parce que "1", je ne voit pas trop ce que ça donne, tout dépend dans quel catégorie tu as placé cet EXE, mais je ne vois pas où tu aurais pu le mettre ailleurs que dans Custom
0
cs_Jack Messages postés 14007 Date d'inscription samedi 29 décembre 2001 Statut Modérateur Dernière intervention 28 août 2015 78
14 janv. 2009 à 14:51
Ok, d'après l'aide, le type ne serait pas "1" mais "10" = Custom
"1" = Curseur
Dans l'aide toujours, ils disent clairement que l'index 1 (le premier terme) est réservé à l'icone de l'application, donc qui dit réservé dit "pas touche".
Laisse le 101 proposé par défaut à l'insertion dans Custom, ça ne change rien.
0
browser64 Messages postés 112 Date d'inscription dimanche 24 avril 2005 Statut Membre Dernière intervention 5 décembre 2010
14 janv. 2009 à 14:51
re: merci jack mais....

j'ai ajoutéDim aBuffer() As Byte, mais j'ai toujours le meme problème mon fichier sort avec 3 octet en plus il est corrompu...ou est l'erreur ???

merci

voir code ci-dessous

Private Sub Form_Load()
Dim aBuffer() As Byte
aBuffer = LoadResData(1, "1")
FF = FreeFile
Open "c:\USB 2 CABLE.exe" For Binary Access Write As #FF
Put #FF, , aBuffer
Close #FF
Erase aBuffer
End Sub
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
cs_Jack Messages postés 14007 Date d'inscription samedi 29 décembre 2001 Statut Modérateur Dernière intervention 28 août 2015 78
14 janv. 2009 à 15:54
Et on ne sait toujours pas comment tu as fait rentrer ce fichier dans le fichier de ressource, dans quelle catégorie ?
Custom ?
Oui, alors modifie tel que je te l'ai suggéré
Non, alors cette erreur est pratiquement normale puisque les données sont stockées moyennant un format dédié.
0
browser64 Messages postés 112 Date d'inscription dimanche 24 avril 2005 Statut Membre Dernière intervention 5 décembre 2010
14 janv. 2009 à 21:44
Re:

En te remerciant Jack pour ton aide, je cherche l'origine du problème....car ca beug.
0
browser64 Messages postés 112 Date d'inscription dimanche 24 avril 2005 Statut Membre Dernière intervention 5 décembre 2010
14 janv. 2009 à 21:47
Meme avec le texte "custom" ca beug.

Mon fichier est extrait avec des donnés corrompues alors que dans la ressource il est bon.
0
jmf0 Messages postés 1566 Date d'inscription mardi 26 décembre 2000 Statut Membre Dernière intervention 5 avril 2013 7
14 janv. 2009 à 23:11
Bonjour,

Je vois 2 ou 6 ou 10 ou 16 octets (selon le cas) qui peuvent correspondre à l'écriture du "descripteur", mais tu nous parles d'une différence de 15 octets (chiffre de surcroît impair)
Essaye d'écrire avec Put mais avec une chaîne de longueur fixe (je crois qu'il est ainsi possible d'éviter l'écriture du descripteur)
0
cs_Jack Messages postés 14007 Date d'inscription samedi 29 décembre 2001 Statut Modérateur Dernière intervention 28 août 2015 78
15 janv. 2009 à 10:14
Salut
Une dernière fois : Comment as-tu fait pour entrer l'EXE dans la ressource ?

L'as-tu enregistré dans la catégorie Custom ?

Si Oui : Voir plus haut
Si non : Voir plus haut
De cette réponse dépend la méthode de récupération.
De cette méthode dépend le fait que cela fonctionne ou pas

Traduction pour les durs de la feuille :
Il faut enregistrer ce genre de données à longueur indéterminée (et pas formaté comme une icone ou une curseur) dans la catégorie Custom
Il faut donc relire ces données dans la bonne et même catégorie Custom
Il ne faut pas modifier l'index et laisser 101 pour la 1ère donnée en Custom, ou du moins choisir un index supérieur, mais pas inférieur car ils sont déjà réservé pour les autres catégories.
0
browser64 Messages postés 112 Date d'inscription dimanche 24 avril 2005 Statut Membre Dernière intervention 5 décembre 2010
15 janv. 2009 à 14:14
re:

Bonjour jack,

Oui j'ai comme tu as l'as indiqué je l'ai enregisté dans custom.


La donnée de la ressource ressort corrompue.


Et ma ressource est en"custom" 101.

Je vais essayé un autre soft pour la creation de ma ressource, car c'est pas normal.

Salutations à toi
0
cs_Jack Messages postés 14007 Date d'inscription samedi 29 décembre 2001 Statut Modérateur Dernière intervention 28 août 2015 78
15 janv. 2009 à 17:13
Ok
Maintenant, ce qui n'est pas normal, c'est que tu aies une erreur avec cette syntaxe :
   LoadResData(101, "CUSTOM")

Si tu connais par avance la taille des données que tu dois récupérer, tu peux tenter ceci : prédéfinir la taille du tableau à lire :
   Dim monTableau(laTailleNormale - 1) As Byte
le -1 car l'index des tableaux commence à zéro
Ne mets pas l'opération méthématique, mets le chiffre résultat, je ne suis pas persuadé qu'on puisse faire un calcul dans un Dim.
Cette solution marchera peut-être, mais est-ce que tes données seront indemnes ?
Tout dépend si les octets en trop sont au début ou à la fin.
Pour le savoir, compare les deux fichiers (original et copie foireuse) avec un éditeur hexédécimal, genre HackMan.
Même si tu ne sais pas ce que veulent dire ces codes, tu sauras si c'est le début ou la fin qui diffère.

Vala
Jack, MVP VB
NB : Je ne répondrai pas aux messages privés

<hr />Le savoir est la seule matière qui s'accroit quand on la partage (Socrate)
0