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

Soyez le premier à donner votre avis sur cette source.

Vue 4 220 fois - Téléchargée 502 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
4307
Date d'inscription
samedi 16 octobre 2004
Statut
Modérateur
Dernière intervention
2 janvier 2019
26 -
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
41
Date d'inscription
mardi 14 décembre 2004
Statut
Membre
Dernière intervention
20 octobre 2015
-
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
4307
Date d'inscription
samedi 16 octobre 2004
Statut
Modérateur
Dernière intervention
2 janvier 2019
26 -
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
641
Date d'inscription
dimanche 13 août 2006
Statut
Membre
Dernière intervention
13 décembre 2018
2 -
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
4307
Date d'inscription
samedi 16 octobre 2004
Statut
Modérateur
Dernière intervention
2 janvier 2019
26 -
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.

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.