DYNAMIC LIBRARY LOADER CLASS: GAGNEZ DU TEMPS POUR CHARGER LES FONCTIONS DE VOS
g3g3
Messages postés4Date d'inscriptionlundi 14 février 2005StatutMembreDernière intervention 9 janvier 2012
-
25 janv. 2010 à 19:06
f0xi
Messages postés4205Date d'inscriptionsamedi 16 octobre 2004StatutModérateurDernière intervention12 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.
f0xi
Messages postés4205Date d'inscriptionsamedi 16 octobre 2004StatutModérateurDernière intervention12 mars 202235 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és39Date d'inscriptionmardi 14 décembre 2004StatutMembreDernière intervention20 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és4205Date d'inscriptionsamedi 16 octobre 2004StatutModérateurDernière intervention12 mars 202235 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és615Date d'inscriptiondimanche 13 août 2006StatutMembreDernière intervention13 décembre 20183 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és4205Date d'inscriptionsamedi 16 octobre 2004StatutModérateurDernière intervention12 mars 202235 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és615Date d'inscriptiondimanche 13 août 2006StatutMembreDernière intervention13 décembre 20183 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és4205Date d'inscriptionsamedi 16 octobre 2004StatutModérateurDernière intervention12 mars 202235 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és615Date d'inscriptiondimanche 13 août 2006StatutMembreDernière intervention13 décembre 20183 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
20 avril 2012 à 21:10
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++
20 avril 2012 à 10:48
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 ?
17 févr. 2010 à 07:22
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.
16 févr. 2010 à 20:30
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
13 févr. 2010 à 16:57
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.
13 févr. 2010 à 08:30
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!
13 févr. 2010 à 01:34
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.
12 févr. 2010 à 07:24
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