Pergunta

Estou apenas procurando uma explicação simples e concisa da diferença entre os dois.O MSDN não entra em muitos detalhes aqui.

Foi útil?

Solução

  • __declspec(dllexport) informa ao vinculador que você deseja que esse objeto seja disponibilizado para importação de outras DLLs.Ele é usado ao criar uma DLL à qual outras pessoas podem vincular.

  • __declspec(dllimport) importa a implementação de uma DLL para que seu aplicativo possa usá-la.

Sou apenas um desenvolvedor C/C++ novato, então talvez alguém tenha uma explicação melhor do que eu.

Outras dicas

__declspec( dllexport ) - A classe ou função marcada será exportada da DLL em que está incorporada.Se você estiver criando uma DLL e quiser uma API, precisará usar esta ou um arquivo .DEF separado que defina as exportações (MSDN).Isso é útil porque mantém a definição em um só lugar, mas o arquivo .DEF oferece mais opções.

__declspec( dllimport ) - A classe ou função assim marcada será importada de uma DLL.Na verdade, isso não é necessário - você precisa de uma biblioteca de importação de qualquer forma para deixar o vinculador feliz.Mas quando devidamente marcado com dllimport, o compilador e o vinculador possuem informações suficientes para otimizar a chamada;sem ele, você obtém links estáticos normais para uma função stub na biblioteca de importação, o que adiciona indireção desnecessária. ONT1 ONT2

Dois casos de uso diferentes:

1) Você está definindo uma implementação de classe dentro de uma dll.Você quer que outro programa use a classe.Aqui você usa dllexport ao criar uma classe que deseja que a dll exponha.

2) Você está usando uma função fornecida por uma dll.Você inclui um cabeçalho fornecido com a dll.Aqui o cabeçalho usa dllimport para trazer a implementação a ser usada pelo programa atual.

Freqüentemente, o mesmo arquivo de cabeçalho é usado em ambos os casos e uma macro é definida.A configuração de construção define a macro a ser importada ou exportada dependendo do que for necessário.

Dllexport é usado para marcar uma função como exportada.Você implementa a função em sua DLL e a exporta para que fique disponível para qualquer pessoa que use sua DLL.

Dllimport é o oposto:marca uma função como importada de uma DLL.Neste caso você apenas declara a assinatura da função e vincula seu código à biblioteca.

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