Macros de Easy Code Masm (todos los proyectos)


Algunas macros de utilidad pueden ser usadas en los proyectos de Easy Code (visuales y clásicos) simplemente marcando la opción Macros de Easy Code en las Propiedades del proyecto. Sus nombres se colorean como palabras reservadas de Easy Code (vea el menú Configuración) y puede utilizarlas cuando lo desee a lo largo de todo el código. Estas macros, que se encuentran en el archivo ECMacros.asm de la subcarpeta Macros de Easy Code, tienen la sintaxis siguiente:

Color byRed, byGreen, byBlue

Los argumentos byRed, byGreen, byBlue deben ser valores de 8 bits (Byte). Devuelve un color RGB (un valor de 32 bits o COLORREF) en el registro Eax.

Ejemplo:

Color 0AH, 0BH, 0CH

Devuelve 000C0B0AH en el registro Eax


HiByte wValue

El argumento wValue debe ser un valor de 16 bits (Word). Devuelve el byte alto (valor de 8 bits o Byte) de wValue en el registro Al.

Ejemplo:

HiByte 0C0AH

Devuelve 0CH en el registro Al


HiWord dwValue

El argumento dwValue debe ser un valor de 32 bits (DWord). Devuelve la palabra alta (valor de 16 bits o Word) de dwValue en el registro Ax.

Ejemplo:

HiWord 000C000AH

Devuelve 000CH en el registro Ax


LoByte
wValue

El argumento wValue debe ser un valor de 16 bits (Word). Devuelve el byte bajo (valor de 8 bits o Byte) de wValue en el registro Al.

Ejemplo:

LoByte 0C0AH

Devuelve 0AH en el registro Al


LoWord dwValue

El argumento dwValue debe ser un valor de 32 bits (DWord). Devuelve la palabra baja (valor de 16 bits o Word) de dwValue en el registro Ax.

Ejemplo:

LoWord 000C000AH

Devuelve 000AH en el registro Ax


MakeWord
byLow, byHigh

Los argumentos byLow y byHigh de ser valores de 8 bits (Byte). Devuelve el valor resultante de 16 bits (Word) en el registro Ax.

Ejemplo:

MakeWord 0CH, 0AH

Devuelve 0A0CH en el registro Ax


MakeLong wLow, wHigh

Los argumentos wLow y wHigh deben ser valores de 16 bits (Word). Devuelve la doble palabra resultante (DWord) en el registro Eax.

Ejemplo:

MakeLong 0A0BH, 0C0DH

Devuelve 0C0D0A0BH en el registro Eax


Move dwValue1, dwValue2

Los argumentos dwValue1 y dwValue2 deben ser valores de 32 bits (DWord), variables o posiciones de memoria.

Ejemplo:

Move dwMemPos1, dwMemPos2

Mueve el valor de la variable o posición de memoria indicada por dwMemPos2 a la variable o posición de memoria indicada por dwMemPos1.

Esta macro no devuelve ningún valor.


Return dwValue

El argumento dwValue debe ser un valor de 32 bits (DWord). Carga el valor dwValue en el registro Eax y vuelve de un procedimiento.

Ejemplo:

Return TRUE

Carga el registro Eax con el valor TRUE (1) y vuelve.


Date lpszBuf

El argumento lpszBuf debe ser la dirección efectiva de un buffer.

Ejemplo:

Date lpszDate

El buffer lpszDate se llenará con una cadena de texto ANSI que contendrá la fecha actual.


Now lpszBuf

El argumento lpszBuf debe ser la dirección efectiva de un buffer.

Ejemplo:

Now lpszNow

El buffer lpszNow se llenará con una cadena de texto ANSI que contendrá la fecha y hora actuales.


Time lpszBuf

El argumento lpszBuf debe ser la dirección efectiva de un buffer.

Ejemplo:

Time lpszTime

El buffer lpszTime se llenará con una cadena de texto ANSI que contendrá la hora actual.


Text Name, "quoted_text"

El argumento Name debe ser un nombre válido que identifique la cadena indicada por el segundo argumento, "quoted_text", que puede ser cualquier texto entre comillas.

Ejemplo:

Text szBuffer, "Test string"

Después de ejecutarse esta sentencia tendrá un buffer temporal con la cadena de texto especificada (acabada en cero). Recuerde que el valor devuelto por Text NO es la dirección efectiva de la cadena, por lo tanto, deberá utilizar el operador Addr para obtenerla. Por ejemplo:

Text, szTest, "Test string"

Invoke lstrlen, Addr szTest

Devuelve 11 (la longitud de la cadena) en el registro Eax


TextW Name, "quoted_text"

El argumento Name debe ser un nombre válido que identifique la cadena indicada por el segundo argumento, "quoted_text", que puede ser cualquier texto entre comillas.

Ejemplo:

TextW szBufferW, "Test string"

Después de ejecutarse esta sentencia tendrá un buffer con la cadena de texto especificada (acabada en cero) en formato Unicode. Recuerde que el valor devuelto por TextW NO es la dirección efectiva de la cadena, por lo tanto, deberá utilizar el operador Addr para obtenerla. Por ejemplo:

TextW, szTestW, "Test string"

Invoke lstrlenW, Addr szTestW

Devuelve 11 (la longitud de la cadena) en el registro Eax

(Programada por Héctor A. Medina)


TextAddr
("quoted_text")

El argumento "quoted_text" puede ser cualquier texto entre comillas.

Ejemplo:

TextAddr ("Test string")

Después de ejecutarse esta sentencia tendrá la dirección efectiva de una cadena de texto acabada en cero. Puede utilizarla para pasarla como argumento a cualquier rutina o función de la API. Recuerde que el valor devuelto por TextAddr es la dirección efectiva, por lo que NO debe utilizar el operador Addr. Por ejemplo:

Invoke lstrlen, TextAddr("Test string")

Devuelve 11 (la longitud de la cadena) en el registro Eax


TextAddrW
("quoted_text")

El argumento "quoted_text" puede ser cualquier texto entre comillas.

Ejemplo:

TextAddrW ("Test string")

Después de ejecutarse esta sentencia tendrá la dirección efectiva de una cadena de texto Unicode acabada en cero. Puede utilizarla para pasarla como argumento a cualquier rutina o función de la API para texto Unicode. Recuerde que el valor devuelto por TextAddrW es la dirección efectiva, por lo que NO debe utilizar el operador Addr. Por ejemplo:

Invoke lstrlenW, TextAddrW("Test string")

Devuelve 11 (la longitud, en caracteres, de la cadena) en el registro Eax

(Programada por Héctor A. Medina)


TextStrA ("quoted_text")

El argumento "quoted_text" puede ser cualquier texto entre comillas.

Ejemplo:

TextStrA("Test string")

Después de ejecutarse esta sentencia tendrá la dirección efectiva de una cadena de texto ANSI acabada en cero. Recuerde que el valor devuelto por TextStrA es la dirección efectiva, por lo que NO debe utilizar el operador Addr.


TextStrW ("quoted_text")

El argumento "quoted_text" puede ser cualquier texto entre comillas.

Ejemplo:

TextStrW("Test string")

Después de ejecutarse esta sentencia tendrá la dirección efectiva de una cadena de texto Unicode acabada en cero. Recuerde que el valor devuelto por TextStrW es la dirección efectiva, por lo que NO debe utilizar el operador Addr.


TextStr ("quoted_text")

El argumento "quoted_text" puede ser cualquier texto entre comillas.

Ejemplo:

TextStr("Test string")

Después de ejecutarse esta sentencia tendrá la dirección efectiva de una cadena de texto acabada en cero, que estará en formato ANSI o Unicode dependiendo del modo en que esté trabajando la aplicación. Si la opción Generar proyecto como Unicode (Windows NT o posterior) de las Propiedades del proyecto está marcada, y la aplicación se está ejecutando en Windows NT o posterior, el texto devuelto será Unicode. De lo contrario, será ANSI.


MultiCat lpszDesPtr, lpszOrgPtr

Concatena dos o más cadenas de texto. El argumento lpszDesPtr debe ser la dirección efectiva de un buffer que recibirá las cadenas concatenadas, mientras que lpszOrgPtr debe ser dirección efectiva de una o más cadenas de texto acabadas en cero y separadas por comas. Como mínimo debe pasarse una cadena como segundo argumento.

Ejemplo:

MultiCat lpszDest, lpszStr1, lpszStr2, ..., lpszStrn

Las cadenas lpszStr1, lpszStr2, ... i lpszStrn son concatenadas a lpszDest.


Swap dwValue1, dwValue2

Los argumentos dwValue1 y dwValue2 deben ser valores de 32 bits.

Ejemplo:

Swap dwVar1, dwVar2

Intercambia los valores de las variables dwVar1 y dwVar2.



OBSERVACIONES
: Recuerde que no es preciso añadir ningún carácter NULL de final de cadena puesto que ya lo añaden las macros: Text, TextW, TextAddr, TextAddrW, TextStr, TextStrA y TextStrW. Por otra parte, TextW, TextAddrW y TextStrW (que devuelven texto Unicode) están limitadas a 243 caracteres, incluyendo el cero final añadido por las macros. Por consiguiente, si se pasan mas de 242 caracteres se producirán errores.

AVISO: Se recomienda el uso de TextStr (o TextStrA, o TextStrW) en lugar de TextAddr (o TextAddrA, o TextAddrW) para la compatibilidad con futuras versiones.

IMPORTANTE: Si no va a utilizar ninguna de estas macros (incluidas por defecto), o sus nombres crean algún conflicto con alguna variable, procedimiento o macro del proyecto, puede quitarlas desmarcando la opción Macros de EasyCode en las Propiedades del proyecto.