MFC - Bibliotecas
UMA libraryé um grupo de funções, classes ou outros recursos que podem ser disponibilizados para programas que precisam de entidades já implementadas sem a necessidade de saber como essas funções, classes ou recursos foram criados ou como funcionam. Uma biblioteca torna mais fácil para um programador usar funções, classes e recursos etc. criados por outra pessoa ou empresa e confiar que essa fonte externa é confiável e eficiente. Alguns recursos exclusivos relacionados a bibliotecas são -
Uma biblioteca é criada e funciona como um programa normal normal, usando funções ou outros recursos e comunicando-se com outros programas.
Para implementar sua funcionalidade, uma biblioteca contém funções que outros programas precisariam para completar sua funcionalidade.
Ao mesmo tempo, uma biblioteca pode usar algumas funções que outros programas não precisariam.
Os programas que utilizam a biblioteca, também são chamados de clientes da biblioteca.
Existem dois tipos de funções que você criará ou incluirá em suas bibliotecas -
Uma função interna é usada apenas pela própria biblioteca e os clientes da biblioteca não precisarão acessar essas funções.
Funções externas são aquelas que podem ser acessadas pelos clientes da biblioteca.
Existem duas grandes categorias de bibliotecas com as quais você lidará em seus programas -
- Bibliotecas estáticas
- Bibliotecas dinâmicas
Biblioteca Estática
UMA static libraryé um arquivo que contém funções, classes ou recursos que um programa externo pode usar para complementar sua funcionalidade. Para usar uma biblioteca, o programador deve criar um link para ela. O projeto pode ser um aplicativo de console, um Win32 ou um aplicativo MFC. O arquivo de biblioteca possui a extensão lib.
Step 1 - Vejamos um exemplo simples de biblioteca estática criando um novo projeto Win32.
Step 2 - Na caixa de diálogo Application Wizard, escolha a opção Static Library.
Step 3 - Clique em Concluir para continuar.
Step 4 - Clique com o botão direito do mouse no projeto no Solution Explorer e adicione um arquivo de cabeçalho da opção de menu Adicionar → Novo Item….
Step 5 - Digite Calculator.h no campo Nome e clique em Adicionar.
Adicione o seguinte código no arquivo de cabeçalho -
#pragma once
#ifndef _CALCULATOR_H_
#define _CALCULATOR_H_
double Min(const double *Numbers, const int Count);
double Max(const double *Numbers, const int Count);
double Sum(const double *Numbers, const int Count);
double Average(const double *Numbers, const int Count);
long GreatestCommonDivisor(long Nbr1, long Nbr2);
#endif // _CALCULATOR_H_
Step 6 - Adicione um arquivo de origem (* .cpp) no projeto.
Step 7 - Digite Calculator.cpp no campo Nome e clique em Adicionar.
Step 8 - Adicione o seguinte código no arquivo * .cpp -
#include "StdAfx.h"
#include "Calculator.h"
double Min(const double *Nbr, const int Total) {
double Minimum = Nbr[0];
for (int i = 0; i < Total; i++)
if (Minimum > Nbr[i])
Minimum = Nbr[i];
return Minimum;
}
double Max(const double *Nbr, const int Total) {
double Maximum = Nbr[0];
for (int i = 0; i < Total; i++)
if (Maximum < Nbr[i])
Maximum = Nbr[i];
return Maximum;
}
double Sum(const double *Nbr, const int Total) {
double S = 0;
for (int i = 0; i < Total; i++)
S += Nbr[i];
return S;
}
double Average(const double *Nbr, const int Total) {
double avg, S = 0;
for (int i = 0; i < Total; i++)
S += Nbr[i];
avg = S / Total;
return avg;
}
long GreatestCommonDivisor(long Nbr1, long Nbr2) {
while (true) {
Nbr1 = Nbr1 % Nbr2;
if (Nbr1 == 0)
return Nbr2;
Nbr2 = Nbr2 % Nbr1;
if (Nbr2 == 0)
return Nbr1;
}
}
Step 9 - Construa esta biblioteca a partir do menu principal, clicando em Build → Build MFCLib.
Step 10 - Quando a biblioteca for construída com sucesso, ela exibirá a mensagem acima.
Step 11 - Para usar essas funções da biblioteca, vamos adicionar outro aplicativo de diálogo MFC baseado em Arquivo → Novo → Projeto.
Step 12 - Vá para a pasta MFCLib \ Debug e copie o arquivo de cabeçalho e os arquivos * .lib para o projeto MFCLibTest, conforme mostrado no instantâneo a seguir.
Step 13 - Para adicionar a biblioteca ao projeto atual, no menu principal, clique em Projeto → Adicionar item existente e selecione MFCLib.lib.
Step 14 - Projete sua caixa de diálogo conforme mostrado no instantâneo a seguir.
Step 15 - Adicionar variável de valor para ambos os controles de edição do tipo de valor duplo.
Step 16 - Adicione a variável de valor para o controle de texto estático, que está no final da caixa de diálogo.
Step 17 - Adicione o manipulador de eventos para o botão Calcular.
Para adicionar funcionalidade da biblioteca, precisamos incluir o arquivo de cabeçalho no arquivo CMFCLibTestDlg.cpp.
#include "stdafx.h"
#include "MFCLibTest.h"
#include "MFCLibTestDlg.h"
#include "afxdialogex.h"
#include "Calculator.h"
Step 18 - Aqui está a implementação do manipulador de eventos de botão.
void CMFCLibTestDlg::OnBnClickedButtonCal() {
// TODO: Add your control notification handler code here
UpdateData(TRUE);
CString strTemp;
double numbers[2];
numbers[0] = m_Num1;
numbers[1] = m_Num2;
strTemp.Format(L"%.2f", Max(numbers,2));
m_strText.Append(L"Max is:\t" + strTemp);
strTemp.Format(L"%.2f", Min(numbers, 2));
m_strText.Append(L"\nMin is:\t" + strTemp);
strTemp.Format(L"%.2f", Sum(numbers, 2));
m_strText.Append(L"\nSum is:\t" + strTemp);
strTemp.Format(L"%.2f", Average(numbers, 2));
m_strText.Append(L"\nAverage is:\t" + strTemp);
strTemp.Format(L"%d", GreatestCommonDivisor(m_Num1, m_Num2));
m_strText.Append(L"\nGDC is:\t" + strTemp);
UpdateData(FALSE);
}
Step 19 - Quando o código acima for compilado e executado, você verá a seguinte saída.
Step 20- Insira dois valores no campo de edição e clique em Calcular. Agora você verá o resultado depois de calcular da biblioteca.
Biblioteca Dinâmica
Uma DLL Win32 é uma biblioteca que pode ser disponibilizada para programas executados em um computador Microsoft Windows. Como uma biblioteca normal, é composta por funções e / ou outros recursos agrupados em um arquivo.
A abreviatura DLL significa Dynamic Link Library. Isso significa que, ao contrário de uma biblioteca estática, uma DLL permite ao programador decidir quando e como outros aplicativos serão vinculados a esse tipo de biblioteca.
Por exemplo, uma DLL permite que aplicativos diferentes usem sua biblioteca da maneira que acharem conveniente e conforme necessário. Na verdade, os aplicativos criados em diferentes ambientes de programação podem usar funções ou recursos armazenados em uma DLL específica. Por esse motivo, um aplicativo se vincula dinamicamente à biblioteca.
Step 1 - Vejamos um exemplo simples criando um novo projeto Win32.
Step 2 - Na seção Tipo de aplicativo, clique no botão de opção DLL.
Step 3 - Clique em Concluir para continuar.
Step 4 - Adicione as seguintes funções no arquivo MFCDynamicLib.cpp e exponha suas definições usando -
extern "C" _declspec(dllexport)
Step 5 - Use o modificador _declspec (dllexport) para cada função que será acessada fora da DLL.
// MFCDynamicLib.cpp : Defines the exported functions for the DLL application.//
#include "stdafx.h"
extern "C" _declspec(dllexport) double Min(const double *Numbers, const int Count);
extern "C" _declspec(dllexport) double Max(const double *Numbers, const int Count);
extern "C" _declspec(dllexport) double Sum(const double *Numbers, const int Count);
extern "C" _declspec(dllexport) double Average(const double *Numbers, const int Count);
extern "C" _declspec(dllexport) long GreatestCommonDivisor(long Nbr1, long Nbr2);
double Min(const double *Nbr, const int Total) {
double Minimum = Nbr[0];
for (int i = 0; i < Total; i++)
if (Minimum > Nbr[i])
Minimum = Nbr[i];
return Minimum;
}
double Max(const double *Nbr, const int Total) {
double Maximum = Nbr[0];
for (int i = 0; i < Total; i++)
if (Maximum < Nbr[i])
Maximum = Nbr[i];
return Maximum;
}
double Sum(const double *Nbr, const int Total) {
double S = 0;
for (int i = 0; i < Total; i++)
S += Nbr[i];
return S;
}
double Average(const double *Nbr, const int Total){
double avg, S = 0;
for (int i = 0; i < Total; i++)
S += Nbr[i];
avg = S / Total;
return avg;
}
long GreatestCommonDivisor(long Nbr1, long Nbr2) {
while (true) {
Nbr1 = Nbr1 % Nbr2;
if (Nbr1 == 0)
return Nbr2;
Nbr2 = Nbr2 % Nbr1;
if (Nbr2 == 0)
return Nbr1;
}
}
Step 6 - Para criar a DLL, no menu principal, clique em Build > Build MFCDynamicLib no menu principal.
Step 7 - Depois que a DLL for criada com sucesso, você verá uma mensagem exibida na janela de saída.
Step 8 - Abra o Windows Explorer e, a seguir, a pasta Debug do projeto atual.
Step 9 - Observe que um arquivo com extensão dll e outro arquivo com extensão lib foram criados.
Step 10 - Para testar este arquivo com extensão dll, precisamos criar um novo aplicativo baseado no diálogo MFC em Arquivo → Novo → Projeto.
Step 11 - Vá para a pasta MFCDynamicLib \ Debug e copie os arquivos * .dll e * .lib para o projeto MFCLibTest conforme mostrado no instantâneo a seguir.
Step 12 - Para adicionar a DLL ao projeto atual, no menu principal, clique em Projeto → Adicionar Item Existente e selecione o arquivo MFCDynamicLib.lib.
Step 13 - Projete sua caixa de diálogo conforme mostrado no instantâneo a seguir.
Step 14 - Adicionar variável de valor para ambos os controles de edição do tipo de valor duplo.
Step 15 - Adicione a variável de valor para o controle de texto estático, que está no final da caixa de diálogo.
Step 16 - Adicione o manipulador de eventos para o botão Calcular.
Step 17 - No projeto que está utilizando a DLL, cada função que será acessada deve ser declarada utilizando o modificador _declspec (dllimport).
Step 18 - Adicione a seguinte declaração de função no arquivo MFCLibTestDlg.cpp.
extern "C" _declspec(dllimport) double Min(const double *Numbers, const int Count);
extern "C" _declspec(dllimport) double Max(const double *Numbers, const int Count);
extern "C" _declspec(dllimport) double Sum(const double *Numbers, const int Count);
extern "C" _declspec(dllimport) double Average(const double *Numbers, const int Count);
extern "C" _declspec(dllimport) long GreatestCommonDivisor(long Nbr1, long Nbr2);
Step 19 - Aqui está a implementação do manipulador de eventos de botão.
void CMFCLibTestDlg::OnBnClickedButtonCal() {
// TODO: Add your control notification handler code here
UpdateData(TRUE);
CString strTemp;
double numbers[2];
numbers[0] = m_Num1;
numbers[1] = m_Num2;
strTemp.Format(L"%.2f", Max(numbers,2));
m_strText.Append(L"Max is:\t" + strTemp);
strTemp.Format(L"%.2f", Min(numbers, 2));
m_strText.Append(L"\nMin is:\t" + strTemp);
strTemp.Format(L"%.2f", Sum(numbers, 2));
m_strText.Append(L"\nSum is:\t" + strTemp);
strTemp.Format(L"%.2f", Average(numbers, 2));
m_strText.Append(L"\nAverage is:\t" + strTemp);
strTemp.Format(L"%d", GreatestCommonDivisor(m_Num1, m_Num2));
m_strText.Append(L"\nGDC is:\t" + strTemp);
UpdateData(FALSE);
}
Step 20 - Quando o código acima for compilado e executado, você verá a seguinte saída.
Step 21- Insira dois valores no campo de edição e clique em Calcular. Agora você verá o resultado após o cálculo da DLL.