FTP | CCD | Buscar | Trucos | Trabajo | Foros |
|
Registrarse | FAQ | Miembros | Calendario | Guía de estilo | Temas de Hoy |
|
Herramientas | Buscar en Tema | Desplegado |
#1
|
||||
|
||||
Compilación condicional
Buenas, tengo un dilema.
Resulta que tengo que incluir una unit si el ejecutable está corriendo en Win7 o Win8, caso contrario no se incluye. Tengo entendido que se hace con los condicionales. ¿Alguien me puede dar una mano? Gracias.
__________________
Uno es responsable de lo que hace y de lo que omite hacer. |
#2
|
||||
|
||||
Hola Santiago.
Las directivas de compilación sirven para indicar cómo debe ser generado (compilado) el programa ejecutable. Una vez obtenido éste, será el mismo programa lo instales en donde lo instales. Si deseas un comportamiento diferente de la aplicación según el sistema operativo donde corra, entonces necesitarás añadir instrucciones que verifiquen en qué versión de Windows se encuentra y, mediante tradicionales "Ifs", separar las sentencias que deben ser ejecutadas en unas versiones del sistema operativo de las que deben ser ejecutadas en otras. Una alternativa a lo anterior sería definir un símbolo condicional en las opciones del proyecto (entrada Conditional defines), sin dejar de usar directivas de compilación $IfDef. El símbolo lo pondrías o lo quitarías, según desees generar un ejecutable para unas versiones de Windows o para otras. No ando muy lúcido este día, pero ojalá te haya servido de algo mi intervención. Un cordial saludo. |
#3
|
||||
|
||||
santiago14,
Cita:
El código anterior en Delphi 7 permite obtener por medio de WMI (Windows Management Instrumentation) el nombre y la versión del Sistema Operativo Windows instalado. Revisa este código: El código anterior en Delphi 2010 permite obtener el nombre y la versión del Sistema Operativo Windows instalado. Nota: En Delphi 7, el código propuesto identifica erróneamente el SO Windows 7 x32 y x64 como Windows XP. Revisa este código: El código anterior en Delphi XE6 permite obtener el nombre y la versión del Sistema Operativo Windows instalado. Revisa esta información: Cita:
Nelson. Última edición por nlsgarcia fecha: 26-06-2014 a las 08:05:37. |
#4
|
||||
|
||||
Gracias nlsgarcia, yo creo que sí sirve.
Me explico mejor. Hay una unit que uso, pero solamente ha sido desarrollada para Win8, si compilo en DelphiXE5 sobre Win8 y lo ejecuto , lo hace sin problemas. Cuando llevo ese ejecutable a otra máquina (XP, Win7), no se ejecuta y devuelve un error. La idea es que cuando esté corriendo en cierto sistema operativo, Win8, le dé bolilla a esa unit, que está en uses claro, y cuando esté corriendo en otro, no. No se si entiende. Lo mismo vale para los objetos, que están dentro del código, que son de esa unit. Ahora que lo veo, no se si por el lado de las condicionales la cosa se encamina. Supongo que se puede combinar lo que pusiste con esta explicación. Un detalle mas, a esa unit la debo poner en la lista de unit del program.
__________________
Uno es responsable de lo que hace y de lo que omite hacer. |
#5
|
||||
|
||||
Con lo que te han explicado, supongo que sería algo así:
La otra opción es:
|
#6
|
||||
|
||||
santiago14,
Cita:
El código anterior en Delphi XE6, ejecuta el procedimiento Msg en función de si el Sistema Operativo es Windows 8 o es otro Sistema Operativo Windows. Espero sea útil Nelson. |
#7
|
||||
|
||||
Para dar más información, revisa la API GetVersionEx y la estructura OSVERSIONINFO
Nota importante: El código anterior dará WinXP(5.1) si corres por ejemplo delphi7 en Win8 en modo de compatibilidad WinXP durante el debug, pero la aplicación ya compilada reconocerá Win8 sin error Saludos. |
#8
|
||||
|
||||
santiago14,
Nota: El segundo código del Msg #3 (Basado en la API GetVersionEx) si es ejecutado en Delphi 7 en modo Debug, identifica erróneamente el SO Windows Vista, Windows 7 y Windows 8 como Windows XP, si es ejecutado directamente desde el ejecutable funcionara correctamente según lo esperado. Nelson. Última edición por nlsgarcia fecha: 27-06-2014 a las 02:57:42. |
|
|
Temas Similares | ||||
Tema | Autor | Foro | Respuestas | Último mensaje |
Consulta condicional? | Theluar | SQL | 4 | 25-10-2013 06:09:04 |
Problemas de condicional If | whatson | Varios | 7 | 18-08-2010 21:57:15 |
si condicional en interbase??? | GustavoCruz | Firebird e Interbase | 3 | 18-11-2008 21:10:08 |
manejar distintas versiones de un producto con compilación condicional.. | pvizcay | Varios | 5 | 13-09-2006 15:34:00 |
locate condicional | gatsoft2 | Varios | 10 | 06-05-2005 16:57:37 |
|