Pergunta

Ao criar uma DLL com o Visual C ++ 2008 Eu tenho um par de opções. Eu posso criar um "biblioteca de classes" , que eu entendo realmente vai me dar uma Biblioteca Net que usa o extenstion CLI (gerenciado) do C ++.

Desde que eu não quero isso, e eu assumi que eu preciso de um arquivo .LIB estática para link em outro projeto executável Visual C ++ janelas, I escolher em vez "Projeto Win32" e, no painel de configurações do aplicativo, especifique um C ++ (sem MFC) DLL.

Isto irá criar um projeto com um arquivo .cpp que é suposto ser onde eu definir "as funções exportadas para a aplicação DLL" .

Este não parece ser o que eu quero também. Basicamente, o que eu estou procurando é o nativo C ++ equivalente ao que seria, em C # .NET ser uma biblioteca de classes montagem. Quero empacotar algumas aulas em uma DLL, em seguida, ter um projeto exe usar classes da DLL , incluindo os arquivos de cabeçalho do projeto DLL e ligação com um .LIB para referências resolver.

O que é a maneira usual de fazer isso?

Foi útil?

Solução

Você está fazendo certo. O que você precisa é marcar suas aulas com __declspec (dllexport) para torná-los disponíveis a partir de fora do projeto. Quando você constrói o projeto, você vai gerar tanto um DLL e um .LIB.

Outras dicas

  • Crie um novo projeto
  • Visual C ++: Win32: Win32 projeto
  • Configurações do aplicativo, selecione DLL e verificação 'exportar símbolos "

Quando você gerar o projeto, ele vai stub uma classe exportada para você, normalmente chamado C {MyLib}.

Você tem razão para fazer um C ++ (sem MFC) DLL. Você pode criar suas classes e os pontos de entrada que você define será exportado a partir dessa DLL para uso por outro código C ++ (por exemplo, uma aplicação Win32 escrito em C ++).

Como os nomes C ++ se deformar automaticamente pelo compilador para valores estranhos e maravilhosos, não é prático para exportá-los como é se os clientes da DLL são, por exemplo, programas em C. Mas se tudo estiver em C ++, você deve estar OK.

Se você criar algumas classes, você pode optar por tê-los ligados dinamicamente (como uma DLL), mas você terá uma biblioteca de importação (criado automaticamente para você), que contém definições de símbolos da DLL. Você também pode optar por vincular estaticamente ao seu código de um aplicativo - neste caso, você iria acabar com uma biblioteca estática (também um .LIB), que contém o código de objeto real em suas classes em vez de símbolos em uma DLL

A vantagem de uma DLL, é claro, que se você escrever várias aplicações usando a biblioteca, eles podem compartilhar a DLL; com uma biblioteca estática, eles contêm uma cópia do seu código da biblioteca.

Eu acho que este artigo descreve o que você está tentando fazer: http://www.codeproject.com/KB/mcpp/usingcppdll.aspx

Pessoalmente eu também preferem exportar funções C (ao contrário de C ++), onde eu faço a este ponteiro explícita para evitar ter de se preocupar com a decoração compilador nome do método específico e expor funções de compilador gerado.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top