![]() |
![]() |
![]() |
![]() |
![]() |
FTP | ![]() |
![]() |
CCD | ![]() |
![]() |
Buscar | ![]() |
![]() |
Trucos | ![]() |
![]() |
Trabajo | ![]() |
![]() |
Foros | ![]() |
|
Registrarse | FAQ | Miembros | Calendario | Guía de estilo | Temas de Hoy |
![]() |
|
Herramientas | Buscar en Tema | Desplegado |
#1
|
||||
|
||||
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! ![]() 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. ![]() Última edición por Al González fecha: 18-08-2005 a las 00:12:51. |
#2
|
||||
|
||||
Esto puede interesarte:
Cita:
|
#3
|
||||
|
||||
![]() ¡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. ![]() |
![]() |
|
|
![]() |
|