Aplicaciones ANSI / Unicode (todos los proyectos)
Easy Code puede generar aplicaciones en versión ANSI o Unicode, para aprovechar plenamente todo el soporte de Unicode que ofrecen GoAsm, GoLink y GoRC.
Para conmutar entre los modos ANSI y Unicode, marque o desmarque la opción Utilizar cadenas de texto Unicode en las Propiedades del proyecto. Cuando esta opción está marcada, la aplicación será Unicode, de lo contrario será ANSI (predetminado). Para aquellas funciones de la API que tienen versiones ANSI y Unicode (por ejemplo LoadString o SetWindowText), Easy Code se asegura de que el compilador llame a la función apropiada. Por ejemplo, si llama a la función LoadString, Easy Code le dirá al compilador que llame a LoadStringA o LoadStringW dependiendo de si está selecionada la versión ANSI o Unicode, Por lo tanto, no hace falta preocuparse de ello (siempre puede evitar este funcionamento llamando directamente a la versión "A" o "W" de la función). Además, cuando trabaje con proyectos visuales, todas las cadenas generadas por el IDE (por ejemplo las propiedades que contienen texto, como Name, FontName, Text o cualquier otra cadena como App.CommandLine, App.FileName, App.Header y App.Path) se pasarán al ensamblador en el formato correcto.
La única cosa que debe tener presente cuando defina cadenas para su aplicación, es elegir el formato correcto, ANSI o Unicode, para que la aplicación generada funcione correctamente. Puede utilizar las macros L y A de GoAsm (vea el manual del compilador GoAsm).
.Data
#Define IDS_HELLO_W L"Hola" ; Cadena Unicode explícita
#Define IDS_HELLO_A A"Hola" ; Cadena ANSI explícita
Como se ha
dicho antes, Easy Code se cuida de todas las
cadenas de texto de las propiedades (proyectos visuales) y se asegura
de que el compilador llame a las
funciones apropiadas de la API (todos los proyectos). Lo mismo
es aplicable a las cadenas declaradas en
la Tabla de Cadenas
del Editor de Recursos para todos los tipos de proyecto. Las
cadenas de los
recursos son almacenadas siempre en formato Unicode y, si es preciso,
se convierten a ANSI cuando se cargan
del archivo ejecutable. Sólo debe ir con cuidado con las
cadenas definidas como raw data
(vea el
manual del compilador de recursos GoRC).
Para que sea más fácil generar cadenas de texto que sean válidas tanto para ANSI como para Unicode, Easy Code define la macro TEXT y el tipo DSS. Cuando se selecciona la versión ANSI (opción Utilizar cadenas de texto Unicode desmarcada), TEXT devuelve una cadena ANSI y DSS se define como DB (byte). Por el contrario, si se selecciona la versión Unicode (opción Utilizar cadenas de texto Unicode marcada), la cadena devuelta por TEXT será Unicode y DSS será definida como DW (word).
.Data
IDS_QUIT DSS TEXT("¿Seguro que desea salir?")
IDS_LF DSS 13, 10
IDS_NULL DSS 0
Easy Code también define la constante CHARSIZE,
que tiene el valor 1
o 2
dependiendo de si se
utiliza la versión ANSI o Unicode. Por lo tanto, si necesita
incrementar un puntero de cadena en un
carácter, puede utilizar la constante CHARSIZE
de la manera
siguiente:
Dependiendo del modo en el que esté trabajando (ANSI o Unicode), el registro Esi se incrementará en 1 o 2 bytes. Además, siempre podrá saber si está trabajando en modo ANSI o Unicode utilizando la directiva #IFDEF UNICODE de la siguiente manera:
#IFDEF UNICODE
;Modo Unicode
#ELSE
;Modo ANSI
#ENDIF
Aplicaciones
ANSI / Unicode
Teniendo en cuenta algunas consideraciones, podrá generar un proyecto en formato ANSI o Unicode sin tener que modificar ni una sola letra del código fuente (sólo marcando o desmarcando la opción Utilizar cadenas de texto Unicode). Todos los ejemplos incluidos en esta versión de Easy Code están programados de esta manera (excepto el ejemplo CardFile, que sólo es ANSI).
1 - Definir todas las cadenas de texto en la Tabla de Cadenas del Editor de Recursos funcionará bién tanto en ANSI como en Unicode y será mas fácil traducir la aplicación a otros idiomas.
2 - Para otras cadenas de texto y caracteres de control definidos en el código fuente (secciones .Code y .Data), utilice siempre la macro TEXT y el tipo definido DSS:
.Data
IDS_STRING1 DSS TEXT("Cadena1")
IDS_STRING2 DSS TEXT("Cadena2")
IDS_LF DSS 13, 10
IDS_NULL DSS 0
IDS_BUFFER DSS MAX_PATH Dup ?
.Code
Puesto que MAX_PATH tiene un valor de 260, IDS_BUFFER será de 260 bytes en ANSI y de 520 bytes (260 palabras) en Unicode.
3 - Cuando llame a funciones de la API, no llame nunca directamente a su versión ANSI o Unicode, p.e. LoadStringA o LoadStringW. Utiliceu siempre su nombre genérico, p.e. LoadString, y deje que Easy Code y GoAsm se cuiden de ello.
4 - Cuando incremente caracteres en punteros de cadena, utilice siempre la constante CHARSIZE para asegurarse de que está incrementando 1 byte para ANSI o 2 bytes para Unicode. Por otra parte, recuerde utilizar la directiva #IFDEF UNICODE cuando necesite saber si la aplicación es ANSI o Unicode.
OBSERVACIONES: Para mas
información sobre Unicode, vea
el manual del compilador GoAsm.
La opción /mslu del enlazador GoLink
La opción /mslu hace que GoLink añada el código de carga del "Microsoft Layer for Unicode" ("mslu") en el archivo generado, para que las aplicaciones Unicode puedan funcionar en Windows 95, 98 o ME. Para los proyectos clásicos puede añadir la opción /mslu en el cuadro de texto de las Opciones del enlazador GoLink en las Propiedades del proyecto. Para los proyectos visuales esta opción es añadida internamente SÓLO si el archivo unicows.dll de Microsoft está en la misma carpeta donde se encuentra el enlazador GoLink (GoAsm\Bin) o en el directorio del sistema, ya que el enlazador necesita que este archivo esté en una de las dos carpetas mencionadas cuando utiliza la opción /mslu. Si no tiene el archivo unicows.dll (aunque es muy fácil conseguirlo en la web de Microsoft), no utilice la opción /mslu.
OBSERVACIONES: Para mas
información sobre "mslu", vea el
manual del enlazador GoLink.
AVISO:
Recuerde que cuando Easy Code se ejecuta en modo Unicode (es decir, en
Windows NT
o sistemas posteriores) el cuadro de diálogo para abrir y
guardar archivos
también es una ventana Unicode. Aun así, una vez
se ha seleccionado un archivo,
su nombre y su ruta ("path") se convierten siempre
a ANSI por motivos
de compatibilidad, por consiguiente, tenga presente esta
cuestión a la hora de
seleccionar carpetas o dar nombre a los objetos y archivos de sus
proyectos.