Variante comparado con evaluación completa
¡Hola a todos!
Estoy desarrollando un componente para automatización OLE de Word, basado en TWordApplication, en Delphi 7 Enterprise sin actualizaciones. Durante una prueba de funcionalidad descubrí un incómodo y a la vez interesante problema. En mi aplicación tengo inactiva la opción de compilación Complete boolean eval (como normalmente se utiliza) y el siguiente bloque de código.
Si la expresión Variant Information [wdWithInTable] devuelve False, el programa ya no debería evaluar las otras dos expresiones del If. No obstante, si lo hace. ¡Evalúa las tres expresiones! :confused: Como es de esperarse, esto genera una excepción con mensaje «El elemento del conjunto solicitado no existe.» porque el programa intenta acceder a una tabla de Word (Aplicacion.Selection.Tables.Item (1)) en un lugar donde no hay ninguna tabla (Aplicacion.Selection.Information [wdWithInTable] devolvió False). Information [wdWithInTable] realmente devuelve False, eso ya lo corroboré. Y, usando la ventana CPU —Ctrl+Alt+C— del depurador (ya quisieran otros fabricantes lograr un depurador tan magnífico), observé que el programa internamente llama a la función _VarAnd de la unidad Variants. Es evidente que está haciendo una evaluación "And" de variantes, ignorando el estado de la directiva de compilación $BOOLEVAL, la cual está en Off. La primera solución que encontré fue moldear (hacer type cast) como Boolean la expresión Information [wdWithInTable], quedando el código anterior de esta forma:
Les agradecería cualquier información que puedan aportar para el mejor manejo de este defecto (¿?) de Delphi. Atentamente, Al González. :) |
Esto puede interesarte:
Cita:
|
¡Gracias Román!
Si que me interesa. Pues yo fui uno más de los «sorprendidos». Ya me temía que se tratase de una cuestión de enfoque, como lo da a entender Ray Lischner. Entonces, mientras la política de Borland no cambie, aconsejo emplear moldes Boolean en casos especiales como el que planteé. Un abrazo lógico. Al González. :) |
La franja horaria es GMT +2. Ahora son las 12:55:22. |
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