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

Résolu
cs_parki Messages postés 75 Date d'inscription mardi 29 juillet 2008 Statut Membre Dernière intervention 25 mars 2019 - 30 mai 2010 à 21:22
cs_parki Messages postés 75 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

1 réponse

cs_parki Messages postés 75 Date d'inscription mardi 29 juillet 2008 Statut Membre Dernière intervention 25 mars 2019
1 juin 2010 à 21:43
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
3
Rejoignez-nous