Dlfcn.h [Résolu]

Quazar 84 Messages postés mardi 19 octobre 2004Date d'inscription 6 octobre 2006 Dernière intervention - 10 janv. 2005 à 11:10 - Dernière réponse : meech 209 Messages postés vendredi 11 avril 2003Date d'inscription 14 août 2007 Dernière intervention
- 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]
Afficher la suite 

Votre réponse

6 réponses

Meilleure réponse
meech 209 Messages postés vendredi 11 avril 2003Date d'inscription 14 août 2007 Dernière intervention - 10 janv. 2005 à 11:44
3
Merci
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.

Merci meech 3

Avec quelques mots c'est encore mieux Ajouter un commentaire

Codes Sources a aidé 96 internautes ce mois-ci

Commenter la réponse de meech
Quazar 84 Messages postés mardi 19 octobre 2004Date d'inscription 6 octobre 2006 Dernière intervention - 10 janv. 2005 à 11:54
0
Merci
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]
Commenter la réponse de Quazar
meech 209 Messages postés vendredi 11 avril 2003Date d'inscription 14 août 2007 Dernière intervention - 10 janv. 2005 à 12:21
0
Merci
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.
Commenter la réponse de meech
meech 209 Messages postés vendredi 11 avril 2003Date d'inscription 14 août 2007 Dernière intervention - 10 janv. 2005 à 14:31
0
Merci
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.
Commenter la réponse de meech
Quazar 84 Messages postés mardi 19 octobre 2004Date d'inscription 6 octobre 2006 Dernière intervention - 10 janv. 2005 à 15:48
0
Merci
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]
Commenter la réponse de Quazar
meech 209 Messages postés vendredi 11 avril 2003Date d'inscription 14 août 2007 Dernière intervention - 10 janv. 2005 à 16:11
0
Merci
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.
Commenter la réponse de meech

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.