Partilhar via


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++.

  1. Na barra de menu, escolha Arquivo, Novo, Projeto.

  2. No painel esquerdo da caixa de diálogo de Novo Projeto , expanda Instalado, Modelos, Visual C++, selecione Win32.

  3. No painel central, Aplicativo do Console Win32selecione.

  4. 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.

  5. Na página de Visão geral da caixa de diálogo Assistente de aplicação Win32 , escolha o botão de Avançar .

  6. Na página Configurações do Aplicativo, em Tipo de Aplicativo, selecione DLL.

  7. Escolha o botão de Concluir para criar o projeto.

  1. 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.

  2. 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
    
    
  3. 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çãoObservaçã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.

  4. No projeto de MathFuncsDll em Gerenciador de Soluções, na pasta de Arquivos de Origem , abra MathFuncsDll.cpp.

  5. 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;
        }
    }
    
  6. Criar a biblioteca de link dinâmico escolhendo Compilar, Compilar solução na barra de menus.

    ObservaçãoObservaçã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çãoObservaçã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

  1. 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.

  2. No painel esquerdo, em Visual C++, Win32selecione.

  3. No painel central, Aplicativo do Console Win32selecione.

  4. 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.

  5. Na página de Visão geral da caixa de diálogo Assistente de aplicação Win32 , escolha o botão de Avançar .

  6. Na página Configurações do Aplicativo, em Tipo de Aplicativo, selecione Aplicativo de Console.

  7. Na página Configurações do Aplicativo, em Opções Adicionais, desmarque a caixa de seleção Cabeçalho Pré-compilado.

  8. Escolha o botão de Concluir para criar o projeto.

Para usar a funcionalidade de biblioteca de classes no aplicativo

  1. 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.

  2. 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.

  3. 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 .

  4. 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 .

  5. 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;
    }
    
  6. Compile o executável escolhendo Compilar, Compilar solução na barra de menus.

Para executar o aplicativo

  1. 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.

  2. 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

Visual C++ Guided Tour

Walkthrough: Deploying Your Program (C++)

Conceitos

DLLs no Visual C++

Chamar funções DLL de aplicativos Visual Basic

Outros recursos

Implantando aplicativos de Desktop (Visual C++)