![]() |
Problemas con un condicional
Hola amigos, pues mi problema es que no consigo hacer que este condicional haga lo que yo quiero:
Código:
if((DebugEv.u.Exception.ExceptionRecord.ExceptionInformation[0] == 0 && Dbg->MemoryBP.Type == ON_ACCESS) ||La variable DebugEv.u.Exception.ExceptionRecord.ExceptionInformation[0] da 0 si la excepcion es por ejecucion o por lectura y da 1 si es por escritura. ON_ACCESS, ON_EXECUTION y ON_WRITE son tres constantes que defino asi: #define ON_ACCESS PAGE_NOACCESS #define ON_WRITE PAGE_EXECUTE_READ | PAGE_GUARD #define ON_EXECUTION PAGE_READWRITE | PAGE_GUARD La idea es que solo entre en uno de estos 3 casos: 1ª linea -> si ExceptionInformation[0] == 0 y el tipo es ON_ACCESS 2ª linea -> si ExceptionInformation[0] == 0 y el tipo es ON_EXECUTION 3ª linea -> si ExceptionInformation[0] == 1 y el tipo es ON_WRITE El problema es que entra siempre aunque no se cumplan ninguna de las 3 condiciones, o sea, si el tipo es ON_WRITE y ExceptionInformation[0] == 0 entra y no debería. ¿que hago mal en el condicional? Estoy loco dandole vueltas y no veo el fallo. Gracias de antemano. |
Cita:
Según lo que comentas arriba tendría que ser: Código:
... |
Vale, el problema no era ese porque mi condicional, aunque algo menos eficiente, tambien era válido. Al final ha quedado así:
Código:
if((ExceptionAccess.LastExceptionTypeOnMBP == 0 && (Dbg->MemoryBP.Type == int(ON_ACCESS) || |
Cita:
No estoy seguro de entenderte... ¿ Te referis a algo así ? Código:
#define ON_ACCESS 1 // (PAGE_NOACCESS)Saludos :) |
¿hay diferencia entre hacerlo de una manera o de otra a la hora de la comparación?
Me refiero a hacerlo asi: Código:
#define ON_WRITE 288 // (PAGE_EXECUTE_READ | PAGE_GUARD)Código:
#define ON_WRITE PAGE_EXECUTE_READ | PAGE_GUARD |
Hola aguml.
Cita:
De este modo: Código:
#define ON_WRITE PAGE_EXECUTE_READ | PAGE_GUARDCódigo:
if (Valor == ON_WRITE)Código:
if ( (Valor == PAGE_EXECUTE_READ) | PAGE_GUARD)La declaración que corresponde a tu propósito es: Código:
#define ON_WRITE ( PAGE_EXECUTE_READ | PAGE_GUARD )Código:
if (Valor == ( PAGE_EXECUTE_READ | PAGE_GUARD ) )Código:
#define ON_WRITE1 288 |
pues no sabia que podia usarse parentesis en un #define y no habia pensado que pudiera ser problema de precedencia de operadores. Mañana hago la prueba y cambio el codigo. Muchisimas gracias por las aclaraciones, sois un foro cojonudo.
|
| La franja horaria es GMT +2. Ahora son las 05:16:47. |
Powered by vBulletin® Version 3.6.8
Copyright ©2000 - 2026, Jelsoft Enterprises Ltd.
Traducción al castellano por el equipo de moderadores del Club Delphi