DYNAMIC LIBRARY LOADER CLASS: GAGNEZ DU TEMPS POUR CHARGER LES FONCTIONS DE VOS

g3g3 Messages postés 4 Date d'inscription lundi 14 février 2005 Statut Membre Dernière intervention 9 janvier 2012 - 25 janv. 2010 à 19:06
f0xi Messages postés 4205 Date d'inscription samedi 16 octobre 2004 Statut Modérateur Dernière intervention 12 mars 2022 - 20 avril 2012 à 21:10
Cette discussion concerne un article du site. Pour la consulter dans son contexte d'origine, cliquez sur le lien ci-dessous.

https://codes-sources.commentcamarche.net/source/51158-dynamic-library-loader-class-gagnez-du-temps-pour-charger-les-fonctions-de-vos-librairies

f0xi Messages postés 4205 Date d'inscription samedi 16 octobre 2004 Statut Modérateur Dernière intervention 12 mars 2022 35
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 39 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 35
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 35
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.
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
13 févr. 2010 à 08:30
Merci Foxi,
Bon OK, je charge ton code et j'y regarde la semaine prochaine!
C'est parce que dans ton commentaire tu mets "cette classe possède des fonctions avancées sous Delphi 2009/2010..."
Bon WE!
f0xi Messages postés 4205 Date d'inscription samedi 16 octobre 2004 Statut Modérateur Dernière intervention 12 mars 2022 35
13 févr. 2010 à 01:34
Elle est en partie pour D2009+, sinon la base est prévue pour au minimum D6/D7.

si tu dois acheter une version pro, je te conseil de prendre contact avec Thierry Laborde, pour qu'il te renseigne au niveau des tarifs existant et à venir pour D2010.
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
12 févr. 2010 à 07:24
Bonjour Foxi,
Dommage que ce soit avec Delphi 2009! Je suis justement en recherche d'optimisation de mon projet D7. Je continuerai donc avec la bonne vielle méthode!
Je dois bientôt acheter une version pro! Je me pose beaucoup de questions. Je n'ai pas envie de tout réécrire mes gestions de fichiers (à l'ancienne)!
Bon enfin, c'est une autre histoire. Je recontacterai le forum pour ça!
Merci en tout cas pour ta contribution.
Jean_Jean
Rejoignez-nous