Funções



Todos os aplicativos escritos em linguagem C ou C++ iniciam a execução do programa através de uma função principal. Nas aplicações tipo Console, essa função denomina-se main. Aplicações Win32 GUI chamam WinMain para iniciar a execução:


int WINAPI WinMain( 
 HINSTANCE  hInstance,       // manipulador da instancia atual
 HINSTANCE  hPrevInstance,   // manipulador da instancia prévia
 LPSTR  lpszCmdLine,         // ponteiro à línha de comando
 int  nCmdShow               // estado de visualização da janela
);


A função WinMain tem quatro parâmetros de entrada:


hInstance

é um manipulador para a instância do programa que estamos executando. Cada vez que se executa uma aplicação, o Windows cria uma Instância para ela, e lhe passa um manipulador de dita instância para a aplicação

hPrevInstance

é um manipulador a instâncias prévias da mesma aplicação. Como o Windows é multitarefa, podem existir várias versões da mesma aplicação executando-se varias instâncias. Em Windows 3.1, este parâmetro nos servia para saber se nossa aplicação já estava sendo executada, e desse modo podiam compartilhar os dados comuns a todas as instâncias. Mas isso era antes, já que em Win32 usa um segmento distinto para cada instância e este parâmetro é sempre NULL, sendo conservado apenas por motivo de compatibilidade

lpszCmdLine

ponteiro a uma cadeia (terminada em zero) que especifica os argumentos de entrada da linha de comando da aplicação

nCmdShow

este parâmetro especifica como se mostrará a janela


Não entraremos em detalhes sobre essa função, visto que tal assunto está reservado para outro curso, sobre WinAPI, que em breve esperamos estar disponibilizando neste Sítio:


Eis um arquivo básico de um Project.cpp do C++Builder, onde podemos visualizar a função principal:

//---------------------------------------------------------------------------
#include <vcl.h>
#pragma hdrstop
USERES("Project2.res");
USEFORM("Unit1.cpp", Form1);
//---------------------------------------------------------------------------
WINAPI WinMain(HINSTANCE, HINSTANCE, LPSTR, int)
{
        try
        {
                 Application->Initialize();
                 Application->CreateForm(__classid(TForm1), &Form1);
                 Application->Run();
        }
        catch (Exception &exception)
        {
                 Application->ShowException(&exception);
        }
        return 0;
}
//---------------------------------------------------------------------------

A função acima encontra-se num arquivo em separado daqueles que estamos acostumados a trabalhar.

Via de regra, em C++, é irrelevante se a função inicial está colocada no início ou no fim do arquivo, pois o programa ignorará o fato, executando do mesmo jeito, tanto numa quanto noutra posição. Evidentemente, no BCB não devemos alterar, sem prévio conhecimento, o conteúdo ou disposição da função WinAPI.

As instruções em C++ aparecem dentro de alguma função, ou seja, de um grupo de comandos que executa alguma tarefa, sendo que as funções podem conter instruções que chamam outras funções, bem como retornar algum valor no seu encerramento para a instrução chamadora.


Criamos a função AloCy() no exemplo abaixo. Quando o usuário der um clique no botão colocado no Form, AloCy() será chamada para imprimir uma mensagem no Label1.



//-------------------ilustra o uso de uma função ----------------------------

#include <vcl.h>
#pragma hdrstop

#include "Unit1.h"
//---------------------------------------------------------------------------
#pragma package(smart_init)
#pragma resource "*.dfm"
TForm1 *Form1;
//---------------------------------------------------------------------------
void AloCy(); // Protótipo da função
//---------------------------------------------------------------------------
__fastcall TForm1::TForm1(TComponent* Owner)
: TForm(Owner)
{
}
//---------------------------------------------------------------------------

void __fastcall TForm1::Button1Click(TObject *Sender)
{
AloCy(); // Chama a função AloCy()
}
//---------------------------------------------------------------------------
// Definição da função AloCy()
void AloCy()
{
Form1 -> Label1 -> Caption = "Alô, Cy!!!! \n"
"Como estão todos aí em Araçatuba???"
"\nEstou com saudades !!!!!";
}

NOTA: Esclarecemos que neste e nos próximos tópicos estaremos trabalhando com funções de uma maneira que, embora não seja incorreta, não é a convencional para o C++Builder. Basicamente estaremos preocupados em conhecer os fundamentos das funções em C++, sem nos preocupar se essa é a forma ideal de se trabalhar com o BCB.

anterior

índice

próxima


HOME || MAPA DO SITE || CURSOS || TUTORIAIS || LINKS || FORUM || CONTATO