Question

Je cherche juste une explication simple et concise de la différence entre ces deux.MSDN n'entre pas dans beaucoup de détails ici.

Était-ce utile?

La solution

  • __declspec(dllexport) indique à l'éditeur de liens que vous souhaitez que cet objet soit rendu disponible pour que d'autres DLL puissent l'importer.Il est utilisé lors de la création d’une DLL à laquelle d’autres peuvent créer un lien.

  • __declspec(dllimport) importe l'implémentation à partir d'une DLL afin que votre application puisse l'utiliser.

Je ne suis qu'un développeur C/C++ novice, alors peut-être que quelqu'un a une meilleure explication que moi.

Autres conseils

__declspec( dllexport ) - La classe ou la fonction ainsi étiquetée sera exportée depuis la DLL dans laquelle elle est intégrée.Si vous créez une DLL et que vous souhaitez une API, vous devrez utiliser ceci ou un fichier .DEF distinct qui définit les exportations (MSDN).C'est pratique car cela conserve la définition au même endroit, mais le fichier .DEF offre plus d'options.

__declspec( dllimport ) - La classe ou la fonction ainsi étiquetée sera importée depuis une DLL.Ce n'est pas réellement nécessaire - vous avez besoin d'une bibliothèque d'importation de toute façon pour rendre l'éditeur de liens heureux.Mais lorsqu'il est correctement marqué avec dllimport, le compilateur et l'éditeur de liens disposent de suffisamment d'informations pour optimiser l'appel ;sans cela, vous obtenez une liaison statique normale vers une fonction stub dans la bibliothèque d'importation, ce qui ajoute une indirection inutile. ONT1 ONT2

Deux cas d'utilisation différents :

1) Vous définissez une implémentation de classe dans une DLL.Vous souhaitez qu'un autre programme utilise la classe.Ici, vous utilisez dllexport lorsque vous créez une classe que vous souhaitez que la dll expose.

2) Vous utilisez une fonction fournie par une DLL.Vous incluez un en-tête fourni avec la dll.Ici, l'en-tête utilise dllimport pour introduire l'implémentation à utiliser par le programme actuel.

Souvent, le même fichier d'en-tête est utilisé dans les deux cas et une macro est définie.La configuration de construction définit la macro à importer ou à exporter en fonction de ses besoins.

Dllexport est utilisé pour marquer une fonction comme exportée.Vous implémentez la fonction dans votre DLL et l'exportez afin qu'elle devienne accessible à toute personne utilisant votre DLL.

Dllimport est le contraire :il marque une fonction comme étant importée d'une DLL.Dans ce cas, vous déclarez uniquement la signature de la fonction et liez votre code à la bibliothèque.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top