Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
2929 connectés 

  FORUM HardWare.fr
  Programmation
  VB/VBA/VBS

  Comment récupérer une resource custom associée à un projet VB

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

Comment récupérer une resource custom associée à un projet VB

n°250454
drasche
Posté le 21-11-2002 à 10:51:10  profilanswer
 

J'ai trouvé comment récupérer une resource custom associée à un projet VB :)
 
Histoire de planter le décor: je voulais flanquer brutalement un fichier TXT dans un exécutable, lequel TXT contient des messages d'erreur, ce qui me permet de ne pas avoir de crasses à côté du fichier exécutable lorsque je fais la livraison de mon tool préféré.
 
En gros j'ajoute un fichier quelconque comme custom resource.  Il sera donc dans le noeud CUSTOM sous l'ID de votre choix (par défaut: 101).  Ensuite, je le charge grâce à la syntaxe suivante:
 

strText = LoadResData(101, "CUSTOM" )


 
Ouais il fallait bêtement spécifier "CUSTOM" et non pas une constante brolique VB comme j'avais essayé au départ.
 
Dans le cas présent j'ai donc inclu un fichier texte.  Le glitch, c'est que c'est de l'ANSI et que VB travaille uniquement avec des strings en unicode (1 char = 2 bytes physiques), et comme les custom resources sont prises comme du binary, ben ça fait mal et je me retrouve avec un truc inutilisable.  Si le fichier texte est unicode à la base, alors pas de problème, faut juste virer le premier caractère (unicode donc 2 bytes physiques) qui sert de header et le tour est joué, donc j'ai:
 

strText = LoadResData(101, "CUSTOM" )
txtRes.Text = Mid$(strText, 2)


 
dans mon exemple.
 
 
Mais Crimson Editor, qui est au passage un excellent éditeur texte freeware, n'aime pas l'unicode (du moins dans sa version freeware puisque l'option est désactivée).  Et comme il n'y a pas d'option explicite dans notepad pour créer un fichier unicode, il a fallu que je pousse un peu plus loin l'investigation.
 
Grâce à l'excellente API Win32 CopyMemory, j'ai trouvé mon bonheur :)
 

Private Declare Sub CopyMemory _
                Lib "kernel32" _
                Alias "RtlMoveMemory"
                    (Destination As Any, _
                     Source As Any, _
                     ByVal Length As Long)
 
Private Sub Form_Load()
    Dim vData() As Byte
    Dim strText As String
 
    ' Lecture de la resource vers un tableau de bytes
    vData = LoadResData("HMDCM", "CUSTOM" )
    ' Réservation de l'espace nécessaire pour recevoir
    '   la resource sous forme de string (obligatoire
    '   avec CopyMemory  
    strText = Space$(UBound(vData) + 1)
 
    ' Le Byval devant strText force une conversion Unicode
    '   vers ANSI du contenu de la variable, permettant ainsi
    '   un transfert correct des données (CopyMemory travaille
    '   sur une base binaire)
    Call CopyMemory(ByVal strText, vData(0), Len(strText))
 
    ' La string est remplie, affichage à l'écran
    txtRes.Text = strText
End Sub


 
Et ma ressource texte apparaît dans mon champ texte.
 
Ca peut paraître idiot pour certains mais avoir trouvé le truc me met de bonne humeur pour le reste de la journée :)
 
 [:zjk]


Message édité par drasche le 21-05-2003 à 14:44:03

---------------
Whichever format the fan may want to listen is fine with us – vinyl, wax cylinders, shellac, 8-track, iPod, cloud storage, cranial implants – just as long as it’s loud and rockin' (Billy Gibbons, ZZ Top)
mood
Publicité
Posté le 21-11-2002 à 10:51:10  profilanswer
 

n°250458
mareek
Et de 3 \o/
Posté le 21-11-2002 à 11:01:23  profilanswer
 

:)


---------------
"I wonder if the internal negative pressure in self pumping toothpaste tubes is adjusted for different market altitudes." John Carmack

Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Programmation
  VB/VBA/VBS

  Comment récupérer une resource custom associée à un projet VB

 

Sujets relatifs
Récupérer le temps en ms, c possible ? -ntje recherche une personne sur clermont pr un projet
[C++Builder] Récupérer un champ VarBinary(128) via un TFieldComment recuperer dans un .txt les adresses de ficiers
Communauté HFR: projet commun: Le site est en lignequestion pour un projet a realise
Projet en Shell - Help !!!Meilleure solution pour récupérer des infos chez un hébergeur de site
[PHP/MySQL]Comment je fais pour récupérer la valeur que sum() créé ?recuperer la valeurs de select count(*)
Plus de sujets relatifs à : Comment récupérer une resource custom associée à un projet VB


Copyright © 1997-2022 Hardware.fr SARL (Signaler un contenu illicite / Données personnelles) / Groupe LDLC / Shop HFR