7
votes

Même fichier d'en-tête pour la DLL et la bibliothèque statique

Ainsi, le moyen de définir les exportations / importations pour une DLL est le suivant:

#ifdef DLL_CONFIG
    #ifdef MY_EXPORTS
    #define MY_API __declspec(dllexport)
    #else
    #define MY_API __declspec(dllimport)
    #endif
#else
    #define MY_API // What goes here?
#endif

class MY_API MyClass {
    ...
};


0 commentaires

3 Réponses :


14
votes

rien.

laissez-le comme #define my_api et toutes les instances de my_api disparaîtront simplement.

Vous pouvez ajouter de nouvelles configurations de construction, telles que DEBUG-DLL et Libération - DLL qui imite les autres sauf qu'ils #define dll_config .

Pour cloner une configuration, accédez au gestionnaire de configuration (comme la liste déroulante de la zone de liste de débogage / publication) , puis sous «Configuration de la solution active», sélectionnez Nouveau. Vous pouvez désormais nommer "Débogou - dll" et définir les paramètres de copie sur Débogou et maintenant qui reste à faire est de définir dll_config .

Pour ce faire, accédez à Propriétés Propriétés-> Propriétés de la configuration-> C / C ++ -> Préprocesseur et type DLL_Config là-bas. Vous verrez également que c'est là que des choses comme ndebug et win32 sont définies.

comme HAFFAX a déclaré , utilisez des noms spécifiques au projet. Je recommanderais quelque chose comme: xxx

maintenant des utilisateurs de votre DLL juste #define theproject_use_dll s'ils utilisent la version DLL, tout comme votre "- DLL "Les configurations ont.


0 commentaires

5
votes

Définissez simplement mon_api comme vide. Comme ceci: xxx

en cas de liaison statique, aucun DeclSpec n'est nécessaire.

Les utilisateurs de votre bibliothèque devront définir dll_config s'ils veulent Pour l'utiliser comme DLL ou ne pas la définir s'ils veulent l'utiliser comme une bibliothèque statique. Il n'y aura pas de problèmes comme cela. Ce type de configuration est effectué dans de nombreuses bibliothèques.

EDIT: Bien sûr, vous ne devez pas utiliser les noms my_exports et dll_config comme tel. Utilisez des préfixes spécifiques au projet pour toutes vos macros, de sorte qu'il n'y a pas de noms de noms.


0 commentaires

1
votes

Ne rien faire. Aucune convention d'appel spécial n'est nécessaire pour relier une bibliothèque statique. La seule chose que vous devez faire est de vous assurer que le lien de liaison avec votre.Lib.


0 commentaires