Windows: UpdateResource [trouvé]

Windows: UpdateResource [trouvé] - C++ - Programmation

Marsh Posté le 29-08-2002 à 16:34:53    

j'essaye de modifier les ressources d'une DLL:

Code :
  1. HANDLE file =  BeginUpdateResource("file.dll",false);
  2.    char temp[] = "test";
  3.    UpdateResource(file,RT_STRING,"#100",0,temp,(strlen(temp)+1)*sizeof(char));
  4.    EndUpdateResource(file ,false);


 
Alors il m'ouvre bien le fichier, me fait les changement mais quand je recharge les resources ça a pas changé alors qu'il a eu auccune erreur.


Message édité par LetoII le 30-08-2002 à 15:37:00

---------------
Le Tyran
Reply

Marsh Posté le 29-08-2002 à 16:34:53   

Reply

Marsh Posté le 29-08-2002 à 17:03:54    

Petite précision: j'essaye de modifier des chaines ajouté qui sont dans des stringtable dans le ficheir de ressource (c pour pas avoir à recompiler la DLL à chaque modif)


---------------
Le Tyran
Reply

Marsh Posté le 29-08-2002 à 17:39:46    

Bon alors, apparement c un problème d'identification de resource.
 
Si je met ça dans le fichier de resource d'un prog:
 

Code :
  1. STRINGTABLE
  2. {
  3.   100,       "chaine"
  4. }


 
 
Comment je fais pour identifier la resource avec des fonction comme FindResource?


---------------
Le Tyran
Reply

Marsh Posté le 29-08-2002 à 22:09:14    

Yout d'abord il existes des softs qui font ca tres bien.
Il y en a un exellent et gratuit : resource hacker.
Sinon, un petit coup d'oeil dans la MSDN dit que:
- All data containing strings or text must be in Unicode format; lpData must not point to ANSI data.
 
donc je pense que ca ira mieux en replacant
char temp[]
par
TCHAR temp[] = TEXT("test" );
 
ton
(strlen(temp) + 1) * sizeof(char)
devient mauvais du coup
tu peux utiliser
sizeof(temp)
a la place, ou alors
(wstrlen(temp) + 1) * sizeof(TCHAR);
ou aussi avec lstrlenW (de l'API win32 et pas du C)
 
Pour la langue, miaux vaur utiliser
MAKELANGID(LANG_NEUTRAL, SUBLANG_NEUTRAL)
bon, ca donne toujours 0, mais on une meilleur idée de ce que c'est que ce 0.
 
Ca devrait aller mieux.


---------------
FAQ fclc++ - FAQ C++ - C++ FAQ Lite
Reply

Marsh Posté le 30-08-2002 à 08:01:07    

HelloWorld a écrit a écrit :

Yout d'abord il existes des softs qui font ca tres bien.
Il y en a un exellent et gratuit : resource hacker.
Sinon, un petit coup d'oeil dans la MSDN dit que:
- All data containing strings or text must be in Unicode format; lpData must not point to ANSI data.
 
donc je pense que ca ira mieux en replacant
char temp[]
par
TCHAR temp[] = TEXT("test" );
 
ton
(strlen(temp) + 1) * sizeof(char)
devient mauvais du coup
tu peux utiliser
sizeof(temp)
a la place, ou alors
(wstrlen(temp) + 1) * sizeof(TCHAR);
ou aussi avec lstrlenW (de l'API win32 et pas du C)
 
Pour la langue, miaux vaur utiliser
MAKELANGID(LANG_NEUTRAL, SUBLANG_NEUTRAL)
bon, ca donne toujours 0, mais on une meilleur idée de ce que c'est que ce 0.
 
Ca devrait aller mieux.




 
Le pb vient pas de là. Il me rajoute bien les chaînes dans les ressources. Le pb c'est qu'elles remplacent pas les ensiènes


---------------
Le Tyran
Reply

Marsh Posté le 30-08-2002 à 08:08:30    

TCHAR ça change rien. Et la macro MAKELANGID, je l'utilisais déjà (pas mis ici pour pas trop surcharger le code)


---------------
Le Tyran
Reply

Marsh Posté le 30-08-2002 à 08:57:18    

C bien ça le pb. Il ne me remplace pas la chaîne existante mais m'en rajoute une. Après si je réeesaye c celle qui est rajoutée qui est modifiée. C donc que j'identifie mal la resource. qqn a une idée?


---------------
Le Tyran
Reply

Marsh Posté le 30-08-2002 à 09:01:07    

Ha, je comprend mieux "ma chaine est rajoutée mais c'est pas modifié"
En somme, tu as ta chaine en double ?
Si oui, l'erreur se situe peut etre (peut etre) au niveau de la langue ...


---------------
FAQ fclc++ - FAQ C++ - C++ FAQ Lite
Reply

Marsh Posté le 30-08-2002 à 09:03:44    

HelloWorld a écrit a écrit :

Ha, je comprend mieux "ma chaine est rajoutée mais c'est pas modifié"
En somme, tu as ta chaine en double ?
Si oui, l'erreur se situe peut etre (peut etre) au niveau de la langue ...




 
C possible.
 
J'ai pas précisé de langue dans le fichier de ressource.
Je fais comment? (pour la syntaxe je vois c pour le numéro, la macro est utilisable?)


---------------
Le Tyran
Reply

Marsh Posté le 30-08-2002 à 09:05:14    

letoII a écrit a écrit :

 
 
C possible.
 
J'ai pas précisé de langue dans le fichier de ressource.
Je fais comment? (pour la syntaxe je vois c pour le numéro, la macro est utilisable?)




question con, on oublie :D (j'avais ma lu la doc)
 


---------------
Le Tyran
Reply

Marsh Posté le 30-08-2002 à 09:05:14   

Reply

Marsh Posté le 30-08-2002 à 09:06:15    

A tout hasard, ça irait pas en remplaçant le "#100" par MAKEINTRESOURCE(100) ?
 
The MAKEINTRESOURCE macro converts an integer value to a resource type compatible with Win32 resource-management functions. This macro is used in place of a string containing the name of the resource.  
 
LPTSTR MAKEINTRESOURCE(
    WORD wInteger // integer to convert  
   );

Reply

Marsh Posté le 30-08-2002 à 09:07:14    

Ca change rien, pourtant j'ai mis la même langue


---------------
Le Tyran
Reply

Marsh Posté le 30-08-2002 à 09:07:36    

carbon_14 a écrit a écrit :

A tout hasard, ça irait pas en remplaçant le "#100" par MAKEINTRESOURCE(100) ?
 
The MAKEINTRESOURCE macro converts an integer value to a resource type compatible with Win32 resource-management functions. This macro is used in place of a string containing the name of the resource.  
 
LPTSTR MAKEINTRESOURCE(
    WORD wInteger // integer to convert  
   );




 
J'avais essayé aussi, ça marchait pas mieu


---------------
Le Tyran
Reply

Marsh Posté le 30-08-2002 à 09:13:43    

Nan, le "#100" c'est bon, c'est une alternative si on connait le nombre.
Propriete de la dll -> langue, ca dit quoi ?


---------------
FAQ fclc++ - FAQ C++ - C++ FAQ Lite
Reply

Marsh Posté le 30-08-2002 à 09:15:16    

HelloWorld a écrit a écrit :

Nan, le "#100" c'est bon, c'est une alternative si on connait le nombre.
Propriete de la dll -> langue, ca dit quoi ?




 
Français (France)


---------------
Le Tyran
Reply

Marsh Posté le 30-08-2002 à 09:16:24    

En passant: j'arrive pas non plus à trouver les chaîne avec findresource. Alors que loadstring ça marche très bien.


---------------
Le Tyran
Reply

Marsh Posté le 30-08-2002 à 09:24:28    

T'as regardé avec un éditeur de ressource pour être sûr de ce qui cloche ?


---------------
FAQ fclc++ - FAQ C++ - C++ FAQ Lite
Reply

Marsh Posté le 30-08-2002 à 09:28:20    

HelloWorld a écrit a écrit :

T'as regardé avec un éditeur de ressource pour être sûr de ce qui cloche ?




 
 
 :ange:  
 
Ouai, alors quand on fait:

Code :
  1. STRINGTABLE LANGUAGE LANG_NEUTRAL,SUBLANG_SYS_DEFAULT
  2. {
  3.   100,       "chaine"
  4. }


 
Ca donne pas du tout 100 comme numéro de resource. Y a un moyen de le trouver ce numéro de ressouce?


---------------
Le Tyran
Reply

Marsh Posté le 30-08-2002 à 09:46:03    

Je sais pas si c'est ironique ou quoi ... :??:
Moi ce qui m'intéresse c'est l'état de ta dll après execution de ton UpdadeResource ...
http://www.softnews.ro/public/cat/5/4/5-4-5.shtml#


---------------
FAQ fclc++ - FAQ C++ - C++ FAQ Lite
Reply

Marsh Posté le 30-08-2002 à 09:51:28    

C bon j'ai compris.
 
Les chaînes son rangées par groupes de 16. Donc la ressource de type chaine de numéro 1 correspond aux chaines numéro 0 à 15...
 
C pour ça que ça marchait pas.


---------------
Le Tyran
Reply

Marsh Posté le 30-08-2002 à 10:12:17    

Je hai la doc de mocrosoft  :fou:


---------------
Le Tyran
Reply

Marsh Posté le 30-08-2002 à 10:20:06    

Qn saurait où je peux trouver de la doc sur ce sujet?


---------------
Le Tyran
Reply

Marsh Posté le 30-08-2002 à 11:56:57    

J'ai réeussi, mais faute de doc précise sur le sujet ça fait un peu bidouille quand même...
 
Si ça intéresse qqn je posterai la soluce (EDIT la vrai :D)


Message édité par LetoII le 30-08-2002 à 15:32:49

---------------
Le Tyran
Reply

Marsh Posté le 30-08-2002 à 15:36:31    

UP Pour l'edit  :ange:


---------------
Le Tyran
Reply

Marsh Posté le    

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed