Modificar strings de un resource

14/04/2004 - 09:19 por Jordi Gou | Informe spam
Hola.
.
Estoy escribiendo un código para modificar los resources de un fichero exe.
He desarrollado gran parte de los tipos de resources que necesito pero tengo
un pequño problema con la modificación de un string determinado dentro de la
tabla de strings de los resources.

La parte de código que corresponde a esto tiene este aspecto:

lpType = RT_STRING;
//argv[3] es el valor del string en resource.h
szResourceName = MAKEINTRESOURCE(atol(argv[3]));
//argv[4] es el nuevo valor del string
lpResFile = argv[4];
lsize=strlen(argv[4]);
//argv[2] és el path del exe a modificar
hUpdateRes = BeginUpdateResource(argv[2], FALSE));
UpdateResource(hUpdateRes, lpType, szResourceName,MAKELANGID(LANG_NEUTRAL,
SUBLANG_NEUTRAL),lpResFile, lSize);
EndUpdateResource(hUpdateRes, FALSE);

No sé exactamente qué está pasando porque UpdateResource no da error pero el
string no se modifica en el exe que le introduzco.

Alguien puede ayudarme? Alguien sabe qué es lo que hago mal?

Gracias

Jordi

Preguntas similare

Leer las respuestas

#1 Cholo Lennon
14/04/2004 - 19:08 | Informe spam
¿Que sistema operativo estás usando?. BeginUpdateResource solo está
disponible sobre NT. Además las cadenas deben estar en formato unicode.
Al ver tu codigo, no veo control de errores: Chequear si el handle devuelto
por BeginUpdateResource es válido y si no lo es, utilizar GetLastError para
averiguar más sobre el fallo.


Saludos
Cholo Lennon
Salta, ARG
Respuesta Responder a este mensaje
#2 Jordi Gou
19/04/2004 - 09:22 | Informe spam
Para este programa solo se usan sistemas operativos de la familia NT (2000 o
XP). Las cadenas ya estan en formato Unicode y el control de errores lo he
suprimido en el código que he puesto aquí para simplificarlo. De todas
maneras, ejecutándolo con el control de errores se ve que ninguna de las
operaciones falla. Simplemente lo que quiero.

He podido averiguar que no se puede modificar directamente un string
determinado de una string table directamente. He leido que los strings estan
organizados de 16 en 16 y que se debe poner un ID distinto al que tiene la
constante que lo referencia en el resource.h. Algo así como
(ID_RESOURCE_H>>4) + 1 o algo parecido pero esto tampoco me ha funcionado y
las funciones tampoco me fallan.

Tienes idea de si esto es cierto o como se debe referenciar el string para
modificarlo?

Gracias

Jordi

"Cholo Lennon" wrote in message
news:
¿Que sistema operativo estás usando?. BeginUpdateResource solo está
disponible sobre NT. Además las cadenas deben estar en formato unicode.
Al ver tu codigo, no veo control de errores: Chequear si el handle


devuelto
por BeginUpdateResource es válido y si no lo es, utilizar GetLastError


para
averiguar más sobre el fallo.


Saludos
Cholo Lennon
Salta, ARG


Respuesta Responder a este mensaje
#3 Cholo Lennon
19/04/2004 - 19:19 | Informe spam
Descartados los posibles errores iniciales...entonces hecha un vistazo en
los siguientes sitios:

http://www.wilsonc.demon.co.uk/delphi.htm
http://www.wilsonc.demon.co.uk/delphi_6.htm

En la sección Resource Utilities puedes encontrar código fuente para
modificar cadenas (único problema es que están en Delphi). Presta atención a
los métodos GetString/SetString y EncodeStrings/DecodeStrings.

Saludos
Cholo Lennon
Salta, ARG
email Siga el debate Respuesta Responder a este mensaje
Ads by Google
Help Hacer una preguntaRespuesta Tengo una respuesta
Search Busqueda sugerida