Instruções passo a passo: criando e usando uma biblioteca de vínculo dinâmico (C++)
Este passo a passo mostra como criar uma DLL (biblioteca de vínculo dinâmico) para usar com aplicativos C++. A biblioteca é uma forma excelente de reutilizar códigos. Em vez de reimplementar as mesmas rotinas em cada programa criado, você pode gravá-las uma única vez e usá-las como referência para aplicativos que requerem a respectiva funcionalidade. Ao colocar o código na DLL, você economiza espaço em todos os aplicativos que o usam como referência. Além disso, você pode atualizar a DLL sem precisar compilar os aplicativos novamente. Para obter mais informações sobre DLLs, consulte DLLs no Visual C++.
Este passo a passo apresenta estas tarefas:
Criar projetos na DLL.
Adicionar classes à DLL.
Criar um aplicativo do console que use vínculos dinâmicos com tempo de carregamento para fazer referência à DLL.
Usar a funcionalidade da classe no aplicativo.
Executar o aplicativo.
Este passo a passo cria uma DLL que só pode ser chamada em aplicativos que usam as convenções de chamada de C++. Para obter informações sobre como criar DLLs que possam ser usadas com outras linguagens, consulte Chamando funções DLL a partir de aplicativos Visual Basic.
Pré-requisitos
Este tópico presume que você conhece os princípios básicos da linguagem C++.
Para criar um projeto de DLL
Na barra de menus, escolha Arquivo, Novo, Projeto.
No painel esquerdo da caixa de diálogo Novo Projeto, expanda Instalado, Modelos, Visual C++ e escolha Win32.
No painel central, selecione Aplicativo do Console Win32.
Especifique um nome para o projeto, como MathFuncsDll, na caixa Nome. Especifique um nome para a solução, como DynamicLibrary, na caixa Nome da solução. Escolha o botão OK.
Na página Visão Geral da caixa de diálogo Assistente para Aplicativos do Win32, clique no botão Próximo.
Na página Configurações do Aplicativo, em Tipo de aplicativo, escolha DLL.
Escolha o botão Concluir para criar o projeto.
Para acrescentar uma classe à biblioteca de vínculo dinâmico
Para criar um arquivo de cabeçalho para uma nova classe, escolha Projeto e Adicionar Novo Item na barra de menus. No painel esquerdo da caixa de diálogo Adicionar Novo Item, em Visual C++, escolha Código. No painel central, escolha Arquivo de Cabeçalho (.h). Especifique um nome para o arquivo de cabeçalho, como MathFuncsDll.h, e clique no botão Adicionar. Um arquivo de cabeçalho em branco é exibido.
Acrescente o seguinte código ao início do arquivo de cabeçalho:
// MathFuncsDll.h #ifdef MATHFUNCSDLL_EXPORTS #define MATHFUNCSDLL_API __declspec(dllexport) #else #define MATHFUNCSDLL_API __declspec(dllimport) #endif
Acrescente uma classe básica com o nome de MyMathFuncs para executar operações matemáticas comuns, como adição, subtração, multiplicação e divisão. O código deve ser parecido com este:
namespace MathFuncs { // This class is exported from the MathFuncsDll.dll class MyMathFuncs { public: // Returns a + b static MATHFUNCSDLL_API double Add(double a, double b); // Returns a - b static MATHFUNCSDLL_API double Subtract(double a, double b); // Returns a * b static MATHFUNCSDLL_API double Multiply(double a, double b); // Returns a / b // Throws const std::invalid_argument& if b is 0 static MATHFUNCSDLL_API double Divide(double a, double b); }; }
Quando o símbolo MATHFUNCSDLL_EXPORTS é definido, o símbolo MATHFUNCSDLL_API define o modificador __declspec(dllexport) nas declarações de funções dos membros nesse código. Esse modificador permite exportar a função para a DLL para que seja possível usá-la em outros aplicativos. Quando o símbolo MATHFUNCSDLL_EXPORTS não é definido, por exemplo, quando o arquivo de cabeçalho é incluído por um aplicativo, o símbolo MATHFUNCSDLL_API define o modificador __declspec(dllimport) nas declarações de funções de membros. Esse modificador otimiza a importação da função nos aplicativos. Por padrão, o modelo Novo projeto das DLLs acrescenta PROJECTNAME_EXPORTS à lista de símbolos definidos para o projeto da DLL. Neste exemplo, o símbolo MATHFUNCSDLL_EXPORTS é definido quando o projeto MathFuncsDll é compilado. Para obter mais informações, consulte dllexport, dllimport.
Dica
Se você estiver compilando o projeto da DLL na linha de comando, use a opção /D do compilador para definir o símbolo MATHFUNCSDLL_EXPORTS.
No projeto MathFuncsDll do Gerenciador de Soluções, na pasta Arquivos de Origem, abra MathFuncsDll.cpp.
Implemente a funcionalidade para MyMathFuncs no arquivo de origem. O código deve ser parecido com este:
// MathFuncsDll.cpp : Defines the exported functions for the DLL application. // #include "stdafx.h" #include "MathFuncsDll.h" #include <stdexcept> using namespace std; namespace MathFuncs { double MyMathFuncs::Add(double a, double b) { return a + b; } double MyMathFuncs::Subtract(double a, double b) { return a - b; } double MyMathFuncs::Multiply(double a, double b) { return a * b; } double MyMathFuncs::Divide(double a, double b) { if (b == 0) { throw invalid_argument("b cannot be zero!"); } return a / b; } }
Escolha Compilar e Compilar Solução na barra de menus para compilar a biblioteca de vínculo dinâmico.
Dica
Se você estiver usando uma edição Express que não exibe o menu Compilar, escolha Ferramentas, Configurações e Configurações Avançadas na barra de menus para habilitar essa opção. Em seguida, escolha Compilar e Compilar Solução.
Dica
Se você estiver compilando um projeto na linha de comando, use a opção /LD do compilador para especificar que o arquivo de saída deve ser uma DLL.Para obter mais informações, consulte /MD, /MT, /LD (usar biblioteca em tempo de execução).Use a opção /EHsc do compilador para habilitar o tratamento de exceções C++.Para obter mais informações, consulte /EH (modelo de tratamento de exceções).
Para criar um aplicativo que faça referência à DLL
Para criar um aplicativo C++ que faça referência e use a DLL que você acabou de criar, escolha Arquivo, Novo e Projeto na barra de menus.
No painel esquerdo, em Visual C++, selecione Win32.
No painel central, selecione Aplicativo do Console Win32.
Especifique um nome para o projeto, como MyExecRefsDll, na caixa Nome. Próximo a Solução, escolha a opção Adicionar à Solução da lista suspensa. Essa ação adiciona o novo projeto à solução que contém a DLL. Escolha o botão OK.
Na página Visão Geral da caixa de diálogo Assistente para Aplicativos do Win32, clique no botão Próximo.
Na página Configurações do Aplicativo, em Tipo de aplicativo, escolha Aplicativo de console.
Na página Configurações do Aplicativo, em Opções adicionais, desmarque a caixa de seleção Cabeçalho pré-compilado.
Escolha o botão Concluir para criar o projeto.
Para usar a funcionalidade da biblioteca de classes no aplicativo
Depois que você cria um aplicativo de console, o sistema cria um programa vazio para você. O nome do arquivo de origem será o mesmo que você escolheu anteriormente. Neste exemplo, o nome usado é MyExecRefsDll.cpp.
Para usar as rotinas matemáticas criadas na DLL no aplicativo, você deve fazer referência a elas. Para fazer isso, selecione o projeto MyExecRefsDll no Gerenciador de Soluções e escolha Projeto e Referências na barra de menus. Na caixa de diálogo Páginas de Propriedades, expanda o nó Propriedades Comuns, escolha Estrutura e Referências e clique no botão Adicionar Nova Referência. Para obter mais informações sobre a caixa de diálogo Referências, consulte Caixa de diálogo Estrutura e Referências, Propriedades Comuns, Páginas de Propriedade de <Projectname>.
A caixa de diálogo Adicionar Referência mostra as bibliotecas que podem ser usadas como referência. A guia Projeto mostra os projetos da solução atual e as bibliotecas contidas neles. Na guia Projetos, marque a caixa de seleção próxima a MathFuncsDll e clique no botão OK.
Para fazer referência aos arquivos de cabeçalho da DLL, você deve modificar os caminhos dos diretórios incluídos. Para fazer isso, na caixa de diálogo Páginas de Propriedades, expanda o nó Propriedades de Configuração, expanda o nó C/C++ e escolha Geral. Próximo a Diretórios de Inclusão Adicionais, especifique o caminho do arquivo de cabeçalho MathFuncsDll.h. Você pode usar um caminho relativo, como ..\MathFuncsDll\, e clicar no botão OK.
Agora você pode usar a classe MyMathFuncs nesse aplicativo. Substitua o conteúdo de MyExecRefsDll.cpp por este código:
// MyExecRefsDll.cpp // compile with: /EHsc /link MathFuncsDll.lib #include <iostream> #include "MathFuncsDll.h" using namespace std; int main() { double a = 7.4; int b = 99; cout << "a + b = " << MathFuncs::MyMathFuncs::Add(a, b) << endl; cout << "a - b = " << MathFuncs::MyMathFuncs::Subtract(a, b) << endl; cout << "a * b = " << MathFuncs::MyMathFuncs::Multiply(a, b) << endl; cout << "a / b = " << MathFuncs::MyMathFuncs::Divide(a, b) << endl; try { cout << "a / 0 = " << MathFuncs::MyMathFuncs::Divide(a, 0) << endl; } catch (const invalid_argument &e) { cout << "Caught exception: " << e.what() << endl; } return 0; }
Escolha Compilação e Compilar Solução na barra de menus para compilar o arquivo executável.
Para executar o aplicativo
Verifique se MyExecRefsDll está selecionado como projeto padrão. No Gerenciador de Soluções, escolha MyExecRefsDll. Em seguida, escolha Projeto e Definir como Projeto de Inicialização na barra de menus.
Para executar o projeto, na barra de menus, selecione Depurar, Iniciar sem Depuração. O resultado deve ser semelhante a este:
a + b = 106,4 a - b = -91,6 a * b = 732,6 a / b = 0,0747475 Exceção detectada: b não pode ser igual à zero.
Consulte também
Tarefas
Instruções passo a passo: implantando o programa (C++)
Conceitos
Chamando funções DLL a partir de aplicativos Visual Basic