Dlfcn.h

Résolu
Quazar Messages postés 84 Date d'inscription mardi 19 octobre 2004 Statut Membre Dernière intervention 6 octobre 2006 - 10 janv. 2005 à 11:10
meech Messages postés 209 Date d'inscription vendredi 11 avril 2003 Statut Membre Dernière intervention 14 août 2007 - 10 janv. 2005 à 16:11
Salut



Je cherche des info sur la librairie <dlfcn.h>.

Je voudrais savoir dans quel conditions il est préférable que je l'utilise:

- dlsym(HANDLE, const char *); --> dlfcn.h

au lieu d'un:

- GetProcAddress(HANDLE, const char *); --> winbase.h - Que j'utilise habituellement



Je suis sous winXP/msVC++.



Tout éclaircissement sera le bienvenu car j'avoue être un peu perdu




Vers l'infini et au delà... [Q]

6 réponses

meech Messages postés 209 Date d'inscription vendredi 11 avril 2003 Statut Membre Dernière intervention 14 août 2007
10 janv. 2005 à 11:44
Salut,

La fonction dlsym est habituellement utilisée sur les Linux/Unix pour appeler une fonction issue d'un objet partagé (un .so), c'est-à-dire, en gros, l'équivalent d'une DLL.
Elle est présente pour des questions de portabilité.

Dans l'hypothèse où tu souhaites développer uniquement pour Win32, le conseil est d'utiliser les outils que fournit Microsoft, donc la seconde fonction. Cette dernière te permet de récupérer l'adresse mémoire d'une fonction contenue dans une DLL, et ainsi de l'appeler.

En espérant t'avoir aidé...
Ciao.

NB. Si tu as besoin d'un exemple de code portable, je suis en mesure d'en fournir un relativement rapidement.
3
Quazar Messages postés 84 Date d'inscription mardi 19 octobre 2004 Statut Membre Dernière intervention 6 octobre 2006
10 janv. 2005 à 11:54
Merci de m avoir apporté cette précision.



J'avoue que je m en doutais un peu mais n'étant trop habitué à charger des fonctions .DLL ou .SO, je ne savais plus trop ou j'en etais.



Merci encore.

Connaitrais tu un site oueb où je peux me procurer la <dlfcn.h>, ou suis je oubligé de l'importer depuis un linux ?

Vers l'infini et au delà... [Q]
0
meech Messages postés 209 Date d'inscription vendredi 11 avril 2003 Statut Membre Dernière intervention 14 août 2007
10 janv. 2005 à 12:21
Ces fonctions ne sont pas implémentées nativement sous Win32. A priori, seul le sous-environnement Cygwin propose cet en-tête de fonctions et sa librairie associée.

Le compilateur de Dev-C++, une version de GCC sous Win32, ne propose pas cet en-tête.

Pour implémenter cet en-tête sous Microsoft Visual C++, il sera nécessaire de coder une p'tite librairie interfaçant les fonctions Windows avec les prototypes fournis par dlfcn.h (ça doit être faisable, mais tu t'en sortiras plus rapidement avec la mise en place de quelques macros...).

Cordialement.
0
meech Messages postés 209 Date d'inscription vendredi 11 avril 2003 Statut Membre Dernière intervention 14 août 2007
10 janv. 2005 à 14:31
Pour information, j'ai déposé à l'instant un petit exemple de code portable à ce sujet :
http://www.cppfrance.com/code.aspx?ID=28739

N'hésite pas à me faire part de tes remarques.
Ciao.
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
Quazar Messages postés 84 Date d'inscription mardi 19 octobre 2004 Statut Membre Dernière intervention 6 octobre 2006
10 janv. 2005 à 15:48
Je viens de le télécharger pour y jeter un oeil.

J'ai deux petites question (mais alors vraiment petite)

- Faut que je declare un '#define WIN32' qq part j'imagine pour utiliser ta librairie sous windows ?

- Dans libhello.h tu fais un : SHAREDLIB int Hello(char* str); SHARELIB est une macro sur un type. Pour'tant par défaut cette macro est init a rien :

#ifdef WIN32

#define SHAREDLIB __declspec(dllexport)

#else

#define SHAREDLIB

#endif

Qu est ce que cela veut dire... Je n'ai pas besoin de faire ma déclaration d'export sous linux ?

Vers l'infini et au delà... [Q]
0
meech Messages postés 209 Date d'inscription vendredi 11 avril 2003 Statut Membre Dernière intervention 14 août 2007
10 janv. 2005 à 16:11
1. Oui, il faut ajouter un /DWIN32 dans la ligne de compilation sous VC++ (mais je crois qu'elle fait partie des options par défaut).

2. En effet, il n'est pas nécessaire de spécifier que la fonction dispose de la faculté d'être exportable sous Linux, d'où l'initialisation de la macro SHARELIB à vide.

Ciao.
0
Rejoignez-nous