Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   C++ Builder (https://www.clubdelphi.com/foros/forumdisplay.php?f=13)
-   -   problema con casting de parametro void* (https://www.clubdelphi.com/foros/showthread.php?t=87494)

aguml 14-01-2015 12:37:32

problema con casting de parametro void*
 
Hola amigos, tengo una funcion la cual espera como parametro un LPVOID y tengo un void* pero el problema es que el void* apunta a una direccion y yo quiero enviarle esa direccion + 4.

Código PHP:

voidpPathSave 0x400000;
Depurador->WriteMemory((dirSave[index] + 3), (pPathSave 4), 4); 

pPathSave apunta a 0x400000 y tengo que parar 0x400004 pero no vale una constante porque ese valor varia.
El problema es el segundo parametro de esa funcion la cual espera un buffer. Si por ejemplo hago esto:

Código PHP:

Depurador->WriteMemory(dirSave[index] + 3, &pPathSave4); 

Eso funciona perfecto mero me escribiria 0x400000 y yo quiero el incremento de 4.
¿como se haría eso? solo se me ocurre usar una variable auxiliar la cual incrementaria 4 y le pasaria esa.

Ñuño Martínez 14-01-2015 15:36:10

El problema creo que es porque el compilador no sabe el tamaño del dato. Es decir, si tu itenes un char*, el compilador sabe que el tamaño de dato es 1 octeto ( sizeof (char)). Si tienes int* entonces el tamaño será 2 octetos o 4 octetos (dependiendo de la configuración y del SO), es decir "sizeof (int)". Con void* no lo sabe porque los datos "void" tienen un tamaño de 0 octetos.

Así, "pPathSave + 4" se traduce por
Código:

(void*) (((long int)pPathSave) + (4 * sizeof (void)))
Es decir:
Código:

(void*) (((long int)pPathSave) + (4 * 0))
Y 4 * 0 = 0, de ahí que no sume nada.

La única solución que se me ocurre es no usar void*, sino un puntero al tipo de dato apropiado (deduzco que en tu caso sería int*).

Por cierto, "&pPathSave" devuelve la dirección donde se almacena el puntero, no el valor del puntero.

escafandra 14-01-2015 15:47:52

Código PHP:

Depurador->WriteMemory(dirSave[index] + 3, (PBYTE)pPathSave 44); 

Saludos.


La franja horaria es GMT +2. Ahora son las 16:44:23.

Powered by vBulletin® Version 3.6.8
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
Traducción al castellano por el equipo de moderadores del Club Delphi