Aplicacions ANSI / Unicode (tots els projectes)
L'Easy Code pot generar aplicacions en versió ANSI o Unicode per tal d'aprofitar plenament tot el suport d'Unicode que ofereixen el GoAsm, el GoLink i el GoRC.
Per tal de commutar entre els modes ANSI i Unicode, marqueu o desmarqueu l'opció Utilitza cadenes de text Unicode a les Propietats del projecte. Quan aquesta opció està marcada, l'aplicació serà Unicode, altrament serà ANSI (predetminat). Per aquelles funcions de l'API que tenen versions ANSI i Unicode (per exemple LoadString o SetWindowText), l'Easy Code s'assegura que el compilador cridi la funció apropiada. Per exemple, si crideu la funció LoadString, l'Easy Code li dirà al compilador que cridi LoadStringA o LoadStringW depenent de si està selecionada la versió ANSI o Unicode, Per tant, no cal preocupar-se d'això (sempre podeu evitar aquest funcionament cridant directament a la versió "A" o "W" de la funció). A més, quan treballeu amb projectes visuals, totes les cadenes generades per l'IDE (per exemple les propietats que contenen text, com ara Name, FontName, Text o qualsevol altra cadena com App.CommandLine, App.FileName, App.Header i App.Path) es passaran a l'assemblador en el format correcte.
L'única cosa que heu de tenir present quan definiu cadenes per a la vostra aplicació, és triar el format correcte, ANSI o Unicode, per tal que l'aplicació generada funcioni correctament. Podeu utilitzar les macros L i A del GoAsm (vegeu 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
Tal com s'ha
dit abans, l'Easy Code se'n cuida de totes
les cadenes de text de les propietats (projectes visuals) i s'assegura
de que el compilador cridi les
funcions apropiades de l'API (tots els projectes). El mateix
és aplicable a les cadenes declarades a la
Taula de Cadenes
de l'Editor de Recursos per a tots els tipus de projecte. Les cadenes
dels
recursos són emmagatzemades sempre en format Unicode i, si
cal, es converteixen a ANSI quan es carreguen
del fitxer executable. Només heu d'anar en compte amb les
cadenes definides com a raw
data (vegeu
el manual del compilador de recursos GoRC).
Per tal que sigui més fàcil generarar cadenes de text que siguin vàlides tant per ANSI com per Unicode, l'Easy Code defineix la macro TEXT i el tipus DSS. Quan se selecciona la versió ANSI (opció Utilitza cadenes de text Unicode desmarcada), TEXT torna una cadena ANSI i DSS es defineix com a DB (byte). D'altra banda, si se selecciona la versió Unicode (opció Utilitza cadenes de text Unicode marcada), la cadena tornada per TEXT serà Unicode i DSS serà definida com a DW (word).
.Data
IDS_QUIT DSS TEXT("Segur que voleu sortir?")
IDS_LF DSS 13, 10
IDS_NULL DSS 0
L'Easy Code també defineix la constant CHARSIZE,
que té el valor 1
o 2
depenent de si s'utilitza la versió ANSI o
Unicode. Per tant, si necessiteu incrementar un punter de cadena en un
caràcter, podeu utilitzar la constant CHARSIZE
de la manera següent:
Depenent del mode en el que estigueu treballant (ANSI o Unicode), el registre Esi s'incrementarà en 1 o 2 bytes. A més, sempre podreu saber si esteu treballant en mode ANSI o Unicode utilitzant la directiva #IFDEF UNICODE de la següent manera:
#IFDEF UNICODE
;Mode Unicode
#ELSE
;Mode ANSI
#ENDIF
Aplicacions
ANSI /
Unicode
Tenint en compte algunes consideracions, podreu generar un projecte en format ANSI o Unicode sense haver de modificar ni una sola lletra del codi font (només marcant o desmarcant l'opció Utilitza cadenes de text Unicode). Tots els exemples inclosos en aquesta versió de l'Easy Code estan programats d'aquesta manera (excepte l'exemple CardFile, que només és ANSI).
1 - Definir totes les cadenes de text a la Taula de Cadenes de l'Editor de Recursos funcionarà bé tant en ANSI com en Unicode i serà més fàcil traduir l'aplicació a altres idiomes.
2 - Per altres cadenes de text i caràcters de control definits al codi font (seccions .Code i .Data), utilitzeu sempre la macro TEXT i el tipus definit 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
Com que MAX_PATH té un valor de 260, IDS_BUFFER serà de 260 bytes en ANSI i de 520 bytes (260 paraules) en Unicode.
3 - Quan crideu funcions de l'API, no crideu mai directament a les seva versió ANSI o Unicode, p.e. LoadStringA o LoadStringW. Utilitzeu sempre el seu nom genèric, p.e. LoadString, i deixeu que se'n cuidin l'Easy Code i el GoAsm.
4 - Quan incrementeu caràcters en punters de cadena, utilitzeu sempre la constant CHARSIZE per tal d'assegurar-vos que esteu incrementant 1 byte per ANSI o 2 bytes per Unicode. D'altra banda, recordeu utilitzar la directiva #IFDEF UNICODE quan necessiteu saber si l'aplicació és ANSI o Unicode.
OBSERVACIONS: Per a
més informació sobre l'Unicode, vegeu el manual
del compilador GoAsm.
L'opció /mslu de l'enllaçador GoLink
L'opció /mslu fa que el GoLink afegeixi el codi de càrrega del "Microsoft Layer for Unicode" ("mslu") en el fitxer generat, per tal que les aplicacions Unicode puguin funcionar en Windows 95, 98 o ME. Per als projectes clàssics podeu afegir l'opció /mslu al quadre de text de les Opcions de l'enllaçador GoLink a les Propietats del projecte. Per als projectes visuals aquesta opció és afegida internament NOMÉS si el fitxer unicows.dll de Microsoft està a la mateixa carpeta on es troba l'enllaçador GoLink (GoAsm\Bin) o al directori del sistema, vist que l'enllaçador necessita que aquest fitxer estigui en una de les dues carpetes esmentades quan utilitza l'opció /mslu. Si no teniu el fitxer unicows.dll (tot i que és molt fàcil aconseguir-lo a la web de Microsoft), no utilitzeu l'opció /mslu.
OBSERVACIONS: Per a
més informació sobre el "mslu", vegeu
el manual de l'enllaçador GoLink.
AVÍS:
Recordeu que quan l'Easy Code s'executa en mode Unicode (és
a
dir, en Windows NT
o sistemes posteriors) el quadre de diàleg per obrir i desar
fitxers també és
una finestra Unicode. Tot i així, un cop s'ha seleccionat un
fitxer, el seu nom
i la seva ruta ("path") es converteixen sempre
a ANSI per motius de compatibilitat,
per tant, tingueu present aquesta qüestió a l'hora
de seleccionar carpetes o
posar nom als objectes i fitxers dels vostres projectes.