Chargement d'une DLL

cs_fahim Messages postés 23 Date d'inscription samedi 8 mai 2004 Statut Membre Dernière intervention 5 juin 2006 - 10 avril 2006 à 15:15
meech Messages postés 209 Date d'inscription vendredi 11 avril 2003 Statut Membre Dernière intervention 14 août 2007 - 12 avril 2006 à 16:15
Bonjour,

J'ai besoin d'utiliser les fonctions d'une DLL pour réaliser mon projet. Est-ce qu'il y a un moyen pour charger cette DLL dans le projet une fois pour toute sans passer par l'utilisation de LoadLibrary sachant que j'utilise Visual Studio.Net.
Merci.

12 réponses

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

Oui, il existe un moyen : lier cette Dynamic Link Library directement avec ton projet. Par contre, l'exécutable ne fonctionnera pas si cette DLL est manquante ou si elle n'est pas dans l'un des chemins de la variables d'environnement %PATH%.

Je n'ai pas Visual Studio sous les yeux mais, il me semble que tu peux spécifier les DLL liées au projet dans les "Options du projet".

En espérant t'avoir aidé,
Ciao.
0
cs_Joky Messages postés 1787 Date d'inscription lundi 22 novembre 2004 Statut Membre Dernière intervention 31 janvier 2009 2
10 avril 2006 à 16:18
#pragma comment(lib, "tonfichier.lib")

et voilà...
if(!Meilleur("Joky")) return ERREUR;<
0
meech Messages postés 209 Date d'inscription vendredi 11 avril 2003 Statut Membre Dernière intervention 14 août 2007
10 avril 2006 à 16:25
Les #pragma dépendent du compilateur utilisé : ce n'est pas particulièrement conseillé pour réaliser du code portable.
Sinon : "options -> éditeur de lien -> entrée -> dépendances supplémentaires"

A plus tard.
0
cs_Joky Messages postés 1787 Date d'inscription lundi 22 novembre 2004 Statut Membre Dernière intervention 31 janvier 2009 2
10 avril 2006 à 16:31
IDE : Visual Studio...
Donc marchera très bien
Enfin oui après t'as la méthode manuelle mais bon c'est long et fastidieux ;D
if(!Meilleur("Joky")) return ERREUR;<
0

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

Posez votre question
meech Messages postés 209 Date d'inscription vendredi 11 avril 2003 Statut Membre Dernière intervention 14 août 2007
10 avril 2006 à 16:34
Ah ! je n'ai pas dit que cela ne marchait pas... Mais ce n'est pas parce que l'on bosse un jour sur Visual qu'on l'utilisera toute sa vie !

A plus tard, Joky.

PS. Mais, tu as raison, je crois moi aussi que c'est largement plus simple ! ;-)
0
SAKingdom Messages postés 3212 Date d'inscription lundi 7 novembre 2005 Statut Membre Dernière intervention 16 février 2009 15
10 avril 2006 à 18:20
Oui il peut faire ça seulement si il a la librarie statique qui vien avec. Sinon, ya un problème.

___________________________________________
Les plus grands esprits trouvent toujours une solution
0
Taron31 Messages postés 199 Date d'inscription vendredi 16 avril 2004 Statut Membre Dernière intervention 28 février 2008
10 avril 2006 à 21:29
Jocky, moi je procède comme cela :

Tu crées un projet Win32 Dynamic-Link Library et tu sélectionnes A DLL that exports some symbols comme ça à la compilation tu auras un .LIB en plus de ta DLL. Tu mettras le .LIB dans le répertoire Debug de ton projet et tu rajoutes comme l'a précédemment signalé Jocky #pragma comment(lib, "yourdll.lib") dans ton programme. Après tu importes les symboles des fonctions de la DLL avec un code du genre :

extern "C" {

__declspec(dllimport) void DllFunction();
__declspec(dllimport) void OtherDllFunction();
}

Bien entendu dans ta DLL tu devras déclarer et définir tes fonctions avec le prototype :
extern "C" __declspec(dllexport) void DllFunction() { }
extern "C" __declspec(dllexport) void OtherDllFunction() { }

Bien sûr il doit exister d'autres manières de le faire mais c'est la seule que je connaisse et qui permet d'utiliser une DLL avec un linkage "statique" sans utiliser LoadLibrary & Cie...

J'espère t'avoir aider...
___________________
MVS - Most Valuable Student (Microsoft)
0
meech Messages postés 209 Date d'inscription vendredi 11 avril 2003 Statut Membre Dernière intervention 14 août 2007
10 avril 2006 à 22:19
Pas mal, Taron, je ne connaissais pas...

Merci de l'information : bien que je n'avais pas le problème, c'est bon à savoir !



Ciao.
0
cs_fahim Messages postés 23 Date d'inscription samedi 8 mai 2004 Statut Membre Dernière intervention 5 juin 2006
12 avril 2006 à 10:13
Merci de votre aide, mais certains de vous me proposent d'utiliser une librairie statique .lib alors que je ne dispose que de la DLL. Je veux savoir si je peux m'en passer de LoadLibrary et de définir chaque fois la fonction dont j'ai besoin.

Merci .
0
meech Messages postés 209 Date d'inscription vendredi 11 avril 2003 Statut Membre Dernière intervention 14 août 2007
12 avril 2006 à 10:25
Salut,

Les DLL (Shared Objects sous les Unix et autres) sont des librairies dynamiques, donc par définition, non incluses dans ton exécutables. Elles peuvent se charger de deux manières :
1. Le chargement dynamique "à la volée", donc lorsque tu en as besoin, avec les fonctions LoadLibrary sous Windows ;
2. Lors de la compilation d'un projet, on peut directement au programme les DLL en le spécifiant dans les options de compilation. Mais ceci impose à l'utilisateur exécutant le programme de posséder cette DLL.

Il n'existe pas trente mille solutions.

Ciao.
0
cs_fahim Messages postés 23 Date d'inscription samedi 8 mai 2004 Statut Membre Dernière intervention 5 juin 2006
12 avril 2006 à 16:10
Merci meech pour ces détails, ainsi que pour les autres pour leur aide. Je viens d'essayer de charger des fonctions et ça marche à merveille. Mais je trouve de mal à récupérer les structures de données qui se trouvent dans cette DLL. Peux-tu m'expliquer comment faire.
0
meech Messages postés 209 Date d'inscription vendredi 11 avril 2003 Statut Membre Dernière intervention 14 août 2007
12 avril 2006 à 16:15
Re,

Les déclarations des fonctions, structures sont contenus, comme à l'habitude, dans les fichiers *.h ou *.hpp.
Si tu ne disposes pas de ces fichiers, il faut récupérer la déclaration dans les documentations des API de ta DLL.

Mais peut-être ai-je mal saisi la question.

Au fait, quelle librairie dois-tu charger.

Demeurant à disposition,
Ciao.
0
Rejoignez-nous