Dynamic library loader class: gagnez du temps pour charger les fonctions de vos librairies.

0/5 (8 avis)

Vue 5 106 fois - Téléchargée 699 fois

Description

Charger une librairie de fonctions, de façon dynamique est souvent redondant et nécessite d'écrire toujours et toujours les même codes de chargement et contrôle.

Cela en rebute beaucoup, qui du coups, préfère soit ne pas le faire, soit tout déclarer en statique.

voici donc une classe qui permet de charger une lib et ses fonctions de façon simple et fiable,
sans vous préoccuper des contrôles de chargement etc.

cette classe possède des fonctions avancé sous Delphi 2009/2010, en particulier le listage des fonctions chargée (nom (string), adresse (pointer), chargée ou non (boolean)), la déclaration d'evenement en "reference to" plutôt qu'en "of object" ce qui permet d'assigner de simple procedure à des propriétés evenements.

vous trouverez 2 programmes d'exemple d'utilisation :
DemoLLProg, est un programme console utilisant directement le TLibraryLoader dans son code.
DemoLLUnit, est un programme qui fait appel à une unité qui charge et decharge un TLibraryLoader dans ses sections initialization/finalization.

Code testé uniquement sur Delphi 2009.

Codes Sources

A voir également

Ajouter un commentaire Commentaires
f0xi Messages postés 4205 Date d'inscription samedi 16 octobre 2004 Statut Modérateur Dernière intervention 12 mars 2022 37
20 avril 2012 à 21:10
Yo,

Pas du tout, je ne rencontre jamais de problème avec cette unité. Qu'elle version de Delphi utilise tu, quel DLL lance tu ? est-ce que ton wrapper utilise bien les bonnes convention d'appel ?

a++
gerbito Messages postés 40 Date d'inscription mardi 14 décembre 2004 Statut Membre Dernière intervention 20 octobre 2015
20 avril 2012 à 10:48
Bonjour,

Merci pour ta contribution. Le chargement de dll se déroule bien, par contre, j'ai eu un petit souci avec la récupération de fonctions : Le 1er appel à GetProcAddress fonctionne, mais le pointeur de la Dll (le HMODULE) devient inutilisable suite à ce 1er appel. Il n'est plus possible d'effectuer la moindre opération dessus sans déclencher une erreur. As-tu rencontré ce problème ?
f0xi Messages postés 4205 Date d'inscription samedi 16 octobre 2004 Statut Modérateur Dernière intervention 12 mars 2022 37
17 févr. 2010 à 07:22
La demo est éfféctivement pour D2009, il faudra placer les methodes dans un objet pour en tirer partis.

au niveau mémoire, en D2009 cela prend un chouilla de place avec la liste des fonctions chargée, rien de bien méchant si on à pas un wrapper conséquent (pas comme l'api windows complète par exemple), mais pratique pour un wrapper d'une centaines de fonctions.

au niveau charge, il est certains que les calls en plus pour appeler GetProcAddress et les vérification d'erreur ralentissent un peu le tout, mais la encore, rien de bien méchant.
cs_Jean_Jean Messages postés 615 Date d'inscription dimanche 13 août 2006 Statut Membre Dernière intervention 13 décembre 2018 3
16 févr. 2010 à 20:30
Salut Foxi,

1.J’ai rapatrié les fichiers LibLoader.inc et LibLoader.pas dans le DemoLLUnit pour compiler sous D7.

2. A la compilation, l’erreur est :
« Types incompatibles :pointeur de méthode et pointeur normal »
à la ligne suivante marquée entre !!...!! :
initialization
Loader := TLibraryLoader.Create(LibUser32);
// Assign event procedure (look in LibLoader.Pas -> directive REFTO)
!!Loader.OnLibError := LoaderError;!!

3. LoaderError est une procédure. Peut-être que sous delphi2009, ça marche, mais en D7, il faut sans doute un transtypage ou autre technique pour renvoyer un pointeur sur la procédure LoaderError.
>>> Qu’en penses-tu ?

4. Pour l’instant, je ne vois qu’un éventuel avantage à ton code : une simplification d’écriture dans les unités appellantes. C’est déjà bien. Encore que je bute sur ce problème de pointeur, je n’arrive pas à compiler en D7.
>>> Au niveau mémoire ? temps d’exécution ? as-tu fais des comparatifs avec la méthode traditionnelle?

5. >>> Quel est le rôle du programme qui se limite aux instructions :
writeln('Push key for exit...');
readLn;

Voilà pour l’instant.
Tes réponses en éclaireront sans doute d’autres que moi !
Bien à toi
f0xi Messages postés 4205 Date d'inscription samedi 16 octobre 2004 Statut Modérateur Dernière intervention 12 mars 2022 37
13 févr. 2010 à 16:57
sous entendus "elle n'en a pas sous delphi < 2009".

les fonctionnalités avancées sont surtout une liste des fonctions chargée, des évenements auquels on peu associer de simple procedure/fonction et non uniquement des methodes d'objets, ce qui permet de pouvoir l'utiliser en mode console par exemple.
Afficher les 8 commentaires

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.