DLL non requis ?

Xilofeon Messages postés 55 Date d'inscription mercredi 24 décembre 2003 Statut Membre Dernière intervention 14 avril 2007 - 29 mars 2005 à 14:25
Xilofeon Messages postés 55 Date d'inscription mercredi 24 décembre 2003 Statut Membre Dernière intervention 14 avril 2007 - 29 mars 2005 à 18:02
Bonjour.

Je ne s'ai pas si cela est possible:

je cherche à raliser une DLL. (enfin sa c'est fait) Mais celle si est obligatoire pour que mon programme ce lance.

Ce que je voudrait faire c'est que si la DLL n'est pas présente, le programme puisse ce lancer quand même sans utiliser la class qui utilise des fonctions de la DLL.

Le DLL serait en faite comme un plugin.
++

4 réponses

ymca2003 Messages postés 2070 Date d'inscription mardi 22 avril 2003 Statut Membre Dernière intervention 3 juillet 2006 7
29 mars 2005 à 15:13
Il suffit de ne pas lier la dll lors de l'édition de lien (sans utiliser le header ou le .lib). dans le prog, il suffit de faire un LoadLibrary sur la dll et vérifer sa présence.

Si oui, il ne reste plus qu'à charger les fonctions de la dll avec getProcAddress. Il est cependant nécessaire de faire des typedef pour avoir le prototype des fonctions.

Maintenant si ta dll exporte des classes je ne sais pas si c'est faisable car les noms des fonctions exportées sont alors + compliqués (transformés pour ajouter le nom de la classe et les paramètres).
0
Xilofeon Messages postés 55 Date d'inscription mercredi 24 décembre 2003 Statut Membre Dernière intervention 14 avril 2007
29 mars 2005 à 17:35
Vi c'est sa le probléme le .lib et obligatoire sinon lors du linkage sa tilte.

Je vais tenter de faire le prototype des fonctions ainsi j'aurait pu besoin du .lib.

Euh y'a des trucs spécial que je doit savoir pour faire les prototypes ? (Spécial DLL )
1er fois que je fait un prog avec DLL et je suis pas un As non plus alors je ne sait pas tout .

Bon en tout cas merci je vois vers quoi je doit me diriger toujours...
0
ymca2003 Messages postés 2070 Date d'inscription mardi 22 avril 2003 Statut Membre Dernière intervention 3 juillet 2006 7
29 mars 2005 à 17:45
Imaginons que ta dll exporte cette fonction :


int __stdcall MyDllfct(void* p, int len);


1 - La manière la plus simple ed l'utiliser, c'est de déclarer cette fct dans un .h, inclu à la fois par le prog et la dll mais l'un l'aura en export et l'autre en importe. Pour que le linker ne "tilte" pas tu fournis un .lib qui dir que la fct est dans une dll. Cette méthode oblige la dll à être chargée au démarrage du prog sinon erreur windows.


2 - tu peux également charger la dll et la fct au runtime :


// chargemment dll
HINSTANCE hinst = LoadLibrary(MyDll.dll);

// typedef sur la fonction.
typedef int (__stdcall *PFN_MYDLLFCT)(void* int);


// chargement de la fct :
PFN_MYDLLFCT pfnMyDllFct = (PFN_MYDLLFCT)GetProcAddress(hinst, "MyDllfct");

// utilisation de la fct :
int result = pfnMyDllFct(NULL, 0);

En faisant comme cela, tu peux tester la présence de la dll et de la fonction et agir en conséquence.
0
Xilofeon Messages postés 55 Date d'inscription mercredi 24 décembre 2003 Statut Membre Dernière intervention 14 avril 2007
29 mars 2005 à 18:02
bon bas voila c'est la méthode 2 que je veut. Merci

Plus compliqué mais je vais tanté de me débrouillé avec sa et trouvé un peut de doc...
0
Rejoignez-nous