Hola Pancho:
Estoy viendo la ayuda de version(2):
Visual FoxPro version type:
0 - Run time version
1 - Standard Edition (earlier versions)
2 - Professional Edition (earlier versions)
Realmente no sé por qué la usás, ya que tenía sentido para distinguir entre las versiones que dice ahi, pero ¿de qué sirve esa información? o sea, ¿qué importa si el que ejecuta tiene la versión Runtime (lo que se distribuye), la Standard (el IDE más barato) o la Profesional (el IDE más caro)?
Ya te puedo decir que entre ambas la función
Version() y la propiedad _VFP.
StartMode no hay ninguna similitud
De cara al desarrollo y la ejecución, lo que realmente te importa es saber si estás ejecutando desde la ventana de comandos (o sea, modo desarrollo), desde un EXE, desde una DLL o como un objeto, ya que para cada caso podés tomar distintas decisiones.
El ejemplo más simple donde se usa, es para salir de un programa:
- Si estás en modo EXE (StartMode=4), vas a necesitar usar QUIT, porque si no te podría quedar el ejecutable oculto pero activo, dependiendo de cómolo hayas programado.
- Si estás en modo desarrollo (ejecunatdo desde la ventana de comandos Fox), entonces te va a interesar que al terminar el programa, salga con RETURN y no con QUIT, porque si no vas a tener que volver a abrir y configurar algunas cosas nuevamente, lo que a veces es una pérdida de tiempo, sobre todo cuando querés hacer pruebas rápidas entrando y saliendo del programa
- Si estás ejecutando en modo objeto con createobject(), no vas a querer salir con QUIT tampoco, porque si no, cerrar el objeto te terminaría la aplicación que lo usa...
- Si estás en modo DLL/EXE (COM+), probablemente te va a interesar salir con QUIT, ya que es una instancia separada en memoria, que de otra forma podría quedar en memoria.
Y finalmente tenés las condiciones que quieras habilitar dependiendo del tipo de programa que hagas. Por ejemplo, si el programa que hacés está pensando para ser usado como EXE, entonces hay cosas de depuración que podés habilitar solamente cuando ejecutes en modo Desarrollo (ventana de comandos Fox), ya que podrías asumir que si ejecutás desde ventana de comandos es porque querés depurar algo, y que desde un EXE no podés.
O imaginate un SET STEP, que se te pueda olvidar. Si no lo condicionás para _VFP.StartMode=0, cuando se ejecute (porque te olvides de quitarlo) en el EXE te saldría un error de "Característica no disponible", al igual que algunos otros comandos o funciones que están pensados solamente para el modo Desarrollo.
Si mirás el inicio de FoxBin2Prg vas a ver este código de salida:
IF _VFP.STARTMODE # 4
STORE NULL TO loEx, loCnv
RELEASE loEx, loCnv
RETURN lnResp
ENDIF
IF EMPTY(lnResp) OR VARTYPE(loEx) # "O"
STORE NULL TO loEx, loCnv
RELEASE loEx, loCnv
QUIT
ENDIF
*-- Muy útil para procesos batch que capturan el código de error
DECLARE ExitProcess IN Win32API INTEGER ExitCode
ExitProcess(1) && Esta debe ser de las últimas instrucciones
QUIT
Como FoxBin2Prg está pensado para ser usado como PRG, EXE u Objeto, entonces solamente me interesa controlar que si no se usa como EXE (StartMode # 4), entonces salga con RETURN (o sea que se está usando como PRG u objeto)
En cambio, si se usa como EXE y no hay errores, salga con QUIT.
Finalmente, si se usa como EXE y hay errores, me interesa que salga con ExitProcess(1), lo que permite que si es llamado desde un programa externo, como Plastic o cualquier otro, puedan recibir como resultado de la llamada 0 (ok) ó 1 (error), que es la respuesta típica de los programas.
En fin, tiene mil usos, espero que quede más claro ahora.
Saludos.-