Walkthrough: Creating and Using a Dynamic Link Library (C++)
Esta explicação passo a passo mostra como criar uma biblioteca de link dinâmico (DLL) para uso com o aplicativo de c++.Usar uma biblioteca é uma ótima maneira de reutilizar o código.Em vez da implementação as mesmas rotinas em cada programa que você cria, você escreve-lhes uma vez e referenciar-las em aplicativos que requerem funcionalidade.Colocando código no DLL, você salva espaço em cada aplicativo que as referências ele, e você pode atualizar o DLL sem recompilar todos os aplicativos.Para obter mais informações sobre o DLLs, consulte DLLs no Visual C++.
Essa explicação passo a passo aborda essas tarefas:
Criando um projeto de DLL.
Adicionando uma classe para a DLL.
Criando um aplicativo de console que usa vincular dinâmica de tempo de carga referência para a DLL.
Usando a funcionalidade da classe no aplicativo.
Executando o aplicativo.
Essa explicação passo a passo cria uma DLL que pode ser chamado somente aplicativos que usam convenções de chamada C++.Para obter informações sobre como criar DLL para uso com outros idiomas, consulte Chamar funções DLL de aplicativos Visual Basic.
Pré-requisitos
Este tópico assume que você entende os fundamentos da linguagem C++.
Para criar uma biblioteca de link dinâmico (DLL) projeto
Na barra de menu, escolha Arquivo, Novo, Projeto.
No painel esquerdo da caixa de diálogo de Novo Projeto , expanda Instalado, Modelos, Visual C++, selecione Win32.
No painel central, Aplicativo do Console Win32selecione.
Especifique um nome para Project- por exemplo, MathFuncsDll- na caixa de Nome .Para especificar um nome de para o exemplo, DynamicLibrary- na caixa de Nome da solução .Escolha o botão OK.
Na página de Visão geral da caixa de diálogo Assistente de aplicação Win32 , escolha o botão de Avançar .
Na página Configurações do Aplicativo, em Tipo de Aplicativo, selecione DLL.
Escolha o botão de Concluir para criar o projeto.
Para adicionar uma classe a biblioteca de link dinâmico
Para criar um arquivo de cabeçalho para uma nova classe, na barra de menu, escolha Projeto, Adicionar novo item.Na caixa de diálogo de Adicionar novo item , no painel esquerdo, em Visual C++, Códigoselecione.No painel central, **Arquivo de Cabeçalho (.h)**selecione.Especifique um nome para o cabeçalho - por exemplo, MathFuncsDll.h-and então escolha o botão de Adicionar .Um arquivo de cabeçalho em branco é exibido.
Adicione o seguinte código para o início do arquivo de cabeçalho:
// MathFuncsDll.h #ifdef MATHFUNCSDLL_EXPORTS #define MATHFUNCSDLL_API __declspec(dllexport) #else #define MATHFUNCSDLL_API __declspec(dllimport) #endif
Adicione uma classe denominada MyMathFuncs básica para executar operações matemáticas comuns como a adição, subtração, multiplicação, e a divisão.O código deve se parecer como 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 de MATHFUNCSDLL_EXPORTS é definido, o símbolo de MATHFUNCSDLL_API definirá o modificador de __declspec(dllexport) nas declarações de função de membro no código.Esse modificador permite que a função a ser exportadas pelo DLL de modo que pode ser usado por outros aplicativos.Quando MATHFUNCSDLL_EXPORTS é indefinido, MATHFUNCSDLL_API define o modificador de __declspec(dllimport) nas declarações de função de membro.Esse modificador permite que o compilador para otimizar a importação de função da DLL para uso em outros aplicativos.Por padrão, MATHFUNCSDLL_EXPORTS é definido quando seu projeto de MathFuncsDll é criado.Para obter mais informações, consulte dllexport, dllimport.
Observação Se você estiver criando o projeto de DLL na linha de comando, use a opção de compilador /D definir o símbolo de MATHFUNCSDLL_EXPORTS.
No projeto de MathFuncsDll em Gerenciador de Soluções, na pasta de Arquivos de Origem , abra MathFuncsDll.cpp.
Implementar a funcionalidade para MyMathFuncs no arquivo de origem.O código deve se parecer como 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; } }
Criar a biblioteca de link dinâmico escolhendo Compilar, Compilar solução na barra de menus.
Observação Se você estiver usando uma edição expressa que não exibe um menu de Compilar , na barra de menu, escolha Ferramentas, Configurações, Configurações avançadas para ativá-lo, e então escolha Compilar, Compilar solução.
Observação Se você estiver criando um projeto na linha de comando, use a opção de compilador /LD especificar que o arquivo de saída é ser uma DLL.Para obter mais informações, consulte / MD, /MT, /LD (biblioteca de tempo de execução de uso).Use a opção de compilador /EHsc habilitar a manipulação de exceção C++.Para obter mais informações, consulte /EH (modelo de manipulação de exceção).
Para criar um aplicativo que faz referência a DLL
Para criar o aplicativo de c++ que fará referência e usar o DLL que você criou, na barra de menu, escolha Arquivo, Novo, Projeto.
No painel esquerdo, em Visual C++, Win32selecione.
No painel central, Aplicativo do Console Win32selecione.
Especifique um nome para Project- por exemplo, MyExecRefsDll- na caixa de Nome .Ao lado de Solução, selecione Adicionar à Solução da lista suspensa.Isso adiciona o novo projeto na mesma solução que contém o DLL.Escolha o botão OK.
Na página de Visão geral da caixa de diálogo Assistente de aplicação Win32 , escolha o botão de Avançar .
Na página Configurações do Aplicativo, em Tipo de Aplicativo, selecione 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 de Concluir para criar o projeto.
Para usar a funcionalidade de biblioteca de classes no aplicativo
Depois de criar um aplicativo de console, um programa vazia é criado para você.O nome para o arquivo de origem é o mesmo que o nome que você escolheu anteriormente.Nesse exemplo, é chamado MyExecRefsDll.cpp.
Para usar o aplicativo rotinas de matemática que você criou no DLL, você deve fazer referência a ele.Para fazer isso, selecione o projeto de MyExecRefsDll em Gerenciador de Soluções, e na barra de menu, escolha Projeto, Referências.Na caixa de diálogo de Páginas de Propriedade , expanda o nó de Propriedades Comuns , Estrutura e Referênciasselecione, e escolha no botão de Adicionar Nova Referência .Para obter mais informações sobre a caixa de diálogo de Referências , consulte Estrutura e referências, propriedades comuns, <Projectname> Caixa de diálogo de páginas de propriedade.
A caixa de diálogo de Adicionar Referência lista as bibliotecas que você pode referenciar.O guia de Projeto listam os projetos na solução atual e todas as bibliotecas que contém.Na guia de Projetos , selecione a caixa de seleção ao lado de MathFuncsDll, e então escolha o botão de OK .
Para referenciar arquivos de cabeçalho de DLL, você deve modificar o caminho de diretório incluído.Para fazer isso, na caixa de diálogo de Páginas de Propriedade , expanda o nó de Propriedades de Configuração , expanda o nó de C/C++ , e selecione Geral.Ao lado de Diretórios de Inclusão Adicionais, especifique o caminho do arquivo local de cabeçalho de MathFuncsDll.h.Você pode usar um caminho- relativo para o exemplo. \ \ MathFuncsDll — escolha o botão de OK .
Agora você pode usar a classe de MyMathFuncs neste aplicativo.Substitua o conteúdo de MyExecRefsDll.cpp com o seguinte 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; }
Compile o executável escolhendo Compilar, Compilar solução na barra de menus.
Para executar o aplicativo
Certifique-se que está selecionado MyExecRefsDll como o projeto padrão.Em Gerenciador de Soluções, em MyExecRefsDll selecione, e na barra de menu, escolha Projeto, Definir como projeto de inicialização.
Para executar o projeto, na barra de menu, escolha Depurar, Iniciar sem Depurar.A saída deve se parecer como este:
a + b = 106,4 - a b = -91,6 * 732,6 = a b a/b = 0,0747475 capturaram a exceção: b não pode ser zero!
Próximas etapas
Anterior:DLLs no Visual C++ | Em seguida:How to: Create Class Libraries
Consulte também
Tarefas
Walkthrough: Deploying Your Program (C++)
Conceitos
Chamar funções DLL de aplicativos Visual Basic