utilisation des declaration dllexport et dllimport

Le
torri
J'aimerais avoir des precisions sur l'utilisation de dllexport,
dllimport, et leur non utilisation pour la creation et l'utilisation
d'une bibliotheque

J'utilise gcc et non vc++ et je cree une dll et une bibliotheque statique
(ou import lib)

Pour l'instant, concernant les methodes exportees, je fais ceci:

1) si je suis en train de creer la bibliotheque :

a) si je construit la dll, je declare les methodes exportees avec
dllexport

b) si je construit la bibliotheque statique, je ne mets rien

2) si je suis en train d'utiliser la bibliotheque, je declare les metodes
avec dllimport.

Avec le code :

* le cas 1) est gere par une macro EFL_EVAS_BUILD, qui n'est definie que
si je suis effectivement en train de creer la dll ou la lib statique

* je sais que je suis en train de creer la dll grace a la macro
DLL_EXPORT

Voici le code

#ifdef _WIN32
# ifdef EFL_EVAS_BUILD
# ifdef DLL_EXPORT
# define EAPI __declspec(dllexport)
# else
# define EAPI
# endif /* ! DLL_EXPORT */
# else
# define EAPI __declspec(dllimport)
# endif /* ! EFL_EVAS_BUILD */
#else

et donc je declare les methodes ainsi:

EAPI void f();

Question: est-ce que j'ai bon, ou bien me plante-je completement ?

merci
Vidéos High-Tech et Jeu Vidéo
Téléchargements
Vos réponses
Gagnez chaque mois un abonnement Premium avec GNT : Inscrivez-vous !
Trier par : date / pertinence
selys
Le #10473121
torri wrote:

Voici le code

#ifdef _WIN32
# ifdef EFL_EVAS_BUILD
# ifdef DLL_EXPORT
# define EAPI __declspec(dllexport)
# else
# define EAPI
# endif /* ! DLL_EXPORT */
# else
# define EAPI __declspec(dllimport)
# endif /* ! EFL_EVAS_BUILD */
#else

et donc je declare les methodes ainsi:

EAPI void f();

Question: est-ce que j'ai bon, ou bien me plante-je completement ?



Oui, c'est la même chose avec VS, avec les fichiers .DEF également :

http://msdn.microsoft.com/en-us/library/aa271769(VS.60).aspx
http://msdn.microsoft.com/en-us/library/aa234651(VS.60).aspx

Le wizard de VS génère la macro à la suite de :
"The following ifdef block is the standard way of creating macros"
comme :
http://www.koders.com/c/fidD5E06972CEBF24954F1DAAED8BF86D401583664E.aspx?s=crc#L890
Torri
Le #10854621
Le Sat, 28 Jun 2008 18:18:07 +0200, selys a écrit :


Oui, c'est la même chose avec VS, avec les fichiers .DEF également :

http://msdn.microsoft.com/en-us/library/aa271769(VS.60).aspx
http://msdn.microsoft.com/en-us/library/aa234651(VS.60).aspx

Le wizard de VS génère la macro à la suite de : "The following ifdef
block is the standard way of creating macros" comme :
http://www.koders.com/c/


fidD5E06972CEBF24954F1DAAED8BF86D401583664E.aspx?s=crc#L890

merci pour les liens et la confirmation :)
Publicité
Poster une réponse
Anonyme