Comment utiliser une chaine de caractères stockée dans un fichier ressource ? [Résolu]

Messages postés
78
Date d'inscription
mardi 29 juillet 2008
Statut
Membre
Dernière intervention
25 mars 2019
- - Dernière réponse : cs_parki
Messages postés
78
Date d'inscription
mardi 29 juillet 2008
Statut
Membre
Dernière intervention
25 mars 2019
- 1 juin 2010 à 21:43
Bonjour,je n'arrive pas à utiliser une chaine de caractère stockée dans un fichier ressources.
(je sais qu'on peut s'en passer mais j'aime bien comprendre)
je travaille avec masm32 et l'IDE RadAsm

Premier essai avec LoadString et STRINGTABLE
********************************************

contenu du fichier .rc;
----------------------

#define IDS_1 100
#define IDS_2 200

STRINGTABLE
BEGIN
IDS_1 "phrase n°1\0" ;\0 pour le 0 de fin de chaine
IDS_2 "phrase n°2\0"
END

extrait code asm ;
-----------------
.data

IDS_1 equ 100
IDS_2 equ 200
buffer BYTE 20 dup(0)
titre BYTE "c'est compliqué",0

.....

(hWnd est le handle de mon prog)

invoke LoadString,hWnd,IDS_1,OFFSET buffer,20 ;me renvoie toujours 0 au lieu du nombre de caractere mis dans buffer

invoke MessageBox,hWnd,OFFSET buffer,OFFSET titre,0 ;d'ou pas d'affichage de "phrase n°1"


deuxième essai avec FindResource et RCDATA:
*******************************************

fichier .rc;
-----------

5000 RCDATA
{
"phrase n°1 \0"
}

extrait code asm:
----------------

.data

HDres dword ?
PointeurRes dword ?
PointeurFirstByteRes dword ?

.....

invoke FindResource,hWnd,5000,RT_RCDATA ;idem,me renvoie 0
mov HDres,eax
invoke LoadResource,hWnd,eax ;du coup ça va moins bien ...
mov PointeurRes,eax
invoke LockResource,eax
mov PointeurFirstByteRes,eax


où est mon erreur ?
merci de votre aide,
PARKI
Afficher la suite 

1 réponse

Meilleure réponse
Messages postés
78
Date d'inscription
mardi 29 juillet 2008
Statut
Membre
Dernière intervention
25 mars 2019
3
Merci
j'ai trouvé mon erreur.
Le troisième paramètres de FindResource doit être un pointeur sur le nom du type de la ressource en chaine ascii à zero terminal
et non pas le type lui même.

erreur:

invoke FindResource,hWnd,5000,RT_RCDATA

ok:

PointeurTypeRes byte "RT_RCDATA",0
invoke FindResource,hWnd,5000,
ADDRPointeurTypeRes

bonne prog
PARKI

Dire « Merci » 3

Quelques mots de remerciements seront grandement appréciés. Ajouter un commentaire

Codes Sources 132 internautes nous ont dit merci ce mois-ci

Commenter la réponse de cs_parki