A Aldeia Numaboa ancestral ainda está disponível para visitação. É a versão mais antiga da Aldeia que eu não quis simplesmente descartar depois de mais de 10 milhões de pageviews. Como diz a Sirley, nossa cozinheira e filósofa de plantão: "Misericórdia, ai que dó!"

Se você tiver curiosidade, o endereço é numaboa.net.br.

Leia mais...

Informática Numaboa - Tutoriais e Programação

Cap. II - Nossa primeira aplicação

Sex

14

Dez

2007


07:52

(4 votos, média 5.00 de 5) 


Exercício com dados não inicializados

No exercício anterior foram utilizados dados inicializados, agora falta criar um exemplo utilizando dados não inicializados:

prog001a.exe
prog001a.exe

vovo Para assistir ao vídeo, faça o download de prog001a.exe.

No exemplo Prog001a foi usada a função GetModuleFileName que é declarada da seguinte maneira:

Biblioteca kernel32.lib

GetModuleFileName,NULL,addr Buffer,225

Esta função extrai o diretório mais o nome da aplicação e o devolve na variável Buffer. Se Buffer já estiver ocupado, ele será modificado com os novos caracteres. O valor 225 significa o comprimento máximo de caracteres que serão devolvidos.

Buffer cumpre a função de armazenador de dados e é onde será armazenada a cadeia de texto devolvida pela função que foi utilizada.

Um programa mais complexo

Façamos nosso programa maior e um pouco mais complexo como mostrado no exemplo a seguir. Para isso utilizaremos a biblioteca masm32.lib.

O Masm32 possui sua própria biblioteca onde podemos encontrar muitas funções úteis, as quais muitas vezes precisamos e não levamos em conta. No seguinte vídeo utilizaremos algumas destas funções. Para isto vamos criar um programa que mostra o diretório da aplicação em uma mensagem e uma segunda mensagem que mostra o nome da aplicação que se está sendo executada:

prog002.exe
prog002.exe

vovo Para assistir ao vídeo, faça o download de prog002.exe.

Funções utilizadas no vídeo prog002.exe

Biblioteca masm32.lib

GetAppPath,addr Buffer

Esta função devolve o diretório da aplicação e o coloca na variável que definimos, neste caso Buffer, que ficará armazenado até que outra função substitua os dados que esta variável contém.

Biblioteca masm32.lib

NameFromPath,addr Buffer,addr NomeAplic

Como sabemos, Buffer contém o nome mais o diretório da aplicação porque já foi utilizado pela API GetModuleFileName. A função NameFromPath só extrairá o nome e o armazenará na variável NomeAplic.

  • Operador dup - significa duplicação. Se utiliza para alocar espaços na memória e sua sintaxe é a seguinte:
Contador dup (valor inicial)

Em contador escrevemos o tamanho que vamos duplicar. O valor inicial é escrito dentro dos parênteses, onde o sinal ? significa que o valor é indefinido.

No nosso código foi declarado da seguinte maneira:

EtiquetaVariávelContador DUPValor Inicial
Bufferdb225 dup(?)
NombreAppdb50 dup(?)

E significa o seguinte: Na variável Buffer foram separados 225 bytes na memória e na variável NombreApp foram separados 50 bytes na memória.

Recomendo que, se for utilizada uma variável para armazenar todo tipo de cadeias de texto devolvidas pelas funções, as variáveis declaradas tenham um espaço correspondente ao que se irá obter.

Você deve estar se perguntando porque se faz isto. É que quando você utiliza diversas variáveis no seu código, se não for alocado um espaço apropriado na memória para a dita variável, a cadeia de texto devolvida muitas vezes invade as outras variáveis e isto pode ocasionar problemas.

Informações adicionais