Utiliser une DLL à partir d'une autre DLL ca se fait ?

Utiliser une DLL à partir d'une autre DLL ca se fait ? - C++ - Programmation

Marsh Posté le 27-03-2003 à 09:55:25    

Ou pas :??:

Reply

Marsh Posté le 27-03-2003 à 09:55:25   

Reply

Marsh Posté le 27-03-2003 à 10:11:48    

Jamais essayé, mais je pense que ça doit pas poser de problèmes.


---------------
each day I don't die is cheating
Reply

Marsh Posté le 27-03-2003 à 10:16:31    

bon ben dès que je peux je teste :)
Si qqn a déjà fait qu'il le dise svp

Reply

Marsh Posté le 27-03-2003 à 10:17:10    

vivi, g des dll qui utilisent une dll qui utilise une dll, ca pose pas de pb

Reply

Marsh Posté le 27-03-2003 à 10:19:56    

ok merci a vous 2 :)  
et sinon, c possible d'utiliser une classe (externe à la DLL) ds une DLL ?

Reply

Marsh Posté le 27-03-2003 à 10:20:44    

heuh ouais, si ladite classe a sa description dans un .lib que tu peux utiliser au link (attention au crt, c le merdier) ou exporter d'une autre dll...

Reply

Marsh Posté le 27-03-2003 à 10:50:45    

comment on fait deja pour integrer une dll a son projet?

Reply

Marsh Posté le 27-03-2003 à 15:43:51    

c pas moi qui peux t'aider pour le moment :D
J'ai pas encore commencé avec Builder :)

Reply

Marsh Posté le 27-03-2003 à 15:44:55    

polo021 a écrit :

comment on fait deja pour integrer une dll a son projet?


 
avec winzip

Reply

Marsh Posté le 27-03-2003 à 15:47:17    

chrisbk a écrit :


 
avec winzip


 
 :sol:

Reply

Marsh Posté le 27-03-2003 à 15:47:17   

Reply

Marsh Posté le 27-03-2003 à 17:20:07    

polo021 a écrit :

comment on fait deja pour integrer une dll a son projet?


 
Je peux t'aider pour Visual C++ :
 
Pour intégrer une DLL à ton projet tu as deux possibilités :

  • Soit la lier "statiquement" à ton application ; c'est à dire qu'elle est chargée au démarrage de ton application et que tu peux appeler les fonctions telles quelles.

Cependant ton application refusera de démarrer si elle n'est pas capable de trouver cette DLL. C'est comme ça que sont chargées les DLLs comme "Kernel32.dll", "User32.dll"...
Cette méthode a l'avantage d'être simple, mais elle nécessite l'utilisation d'un fichier ".lib" utilisé par le linker (sous Visual C++ 6, "Project"->"Settings"->"Link"->"Object/library modules" ).

  • Soit y accéder "dynamiquement" à l'exécution ; c'est à dire qu'elle est chargée quand tu en as besoin mais cela implique un accès plus compliqué.

Ici le gros problème est que l'utilisation n'est pas pratique. En effet, il faut utiliser "LoadLibrary" et "GetProcAddress" (sans oublier "FreeLibrary" ) pour charger les fonctions.
Cependant, cela permet une utilisation bien plus souple (il est possible de gérer les erreurs contrairement à l'autre utilisation).


---------------
each day I don't die is cheating
Reply

Marsh Posté le 28-03-2003 à 12:37:03    

 :jap:

Reply

Marsh Posté le 28-03-2003 à 14:56:56    

gatorette a écrit :


Ici le gros problème est que l'utilisation n'est pas pratique. En effet, il faut utiliser "LoadLibrary" et "GetProcAddress" (sans oublier "FreeLibrary" ) pour charger les fonctions.
Cependant, cela permet une utilisation bien plus souple (il est possible de gérer les erreurs contrairement à l'autre utilisation).


 
par contre tu es limite au std d'appel de fonction en C (pas de surcharge par ex), fo faire gaffe a ca

Reply

Marsh Posté le 28-03-2003 à 15:01:00    

chrisbk a écrit :


 
par contre tu es limite au std d'appel de fonction en C (pas de surcharge par ex), fo faire gaffe a ca


Et surtout tu ne peux plus partager de classes a moins d'inverser les dependances

Reply

Marsh Posté le 28-03-2003 à 15:01:55    

BENB a écrit :


Et surtout tu ne peux plus partager de classes a moins d'inverser les dependances


 
roohh ca faisait bien lgtemps qu'on ne t'avait vu, toi :O
ca va ?

Reply

Marsh Posté le 28-03-2003 à 15:10:06    

Utiliser une DLL à partir d'une autre DLL est tout à fait possible et très courant (fait un apperçu avec dependency walker et tu verras que bcp de dll utilisent kernel32 qui elle meme utilise ntdll ...).
Si tu réalise plusieurs dll qui s'utilisent mutuellement, il faut cependant faire attention à ce qu'elles n'aient pas la meme adresse de chargement par défaut, car elle vont entrer en collision et Windows va devoir les "rebaser" une à une, ce qui peut ralentir sensiblement leur chargement et donc celui de ton programme.


---------------
FAQ fclc++ - FAQ C++ - C++ FAQ Lite
Reply

Marsh Posté le 28-03-2003 à 15:15:48    

BENB a écrit :


Et surtout tu ne peux plus partager de classes a moins d'inverser les dependances


 
Qu'est-ce que tu veux dire par "inverser les dépendances" ?
Tu peux partager relativement simplement des classes en utilisant un système tel que COM ; et (si c'est ce que tu voulais dire) ta Dll ne sera pas dépendante de ton appli.
 
edit: correction de tags (j'ai un peu de mal, désolé)


Message édité par gatorette le 28-03-2003 à 15:16:15

---------------
each day I don't die is cheating
Reply

Marsh Posté le 28-03-2003 à 15:20:18    

chrisbk a écrit :


 
roohh ca faisait bien lgtemps qu'on ne t'avait vu, toi :O
ca va ?


 
Un peu crevee...
 
mais globalement ca va...
 
Et toi ?
 

Reply

Marsh Posté le 28-03-2003 à 15:21:25    

BENB a écrit :


 
Un peu crevee...
 
mais globalement ca va...
 
Et toi ?
 
 


peinard, a nouveau en stage en allemagne pas loin de la plage, boulot sympa, collocs sympa, bref, ca roule tranquille !

Reply

Marsh Posté le 28-03-2003 à 15:23:46    

gatorette a écrit :


 
Qu'est-ce que tu veux dire par "inverser les dépendances" ?
Tu peux partager relativement simplement des classes en utilisant un système tel que COM ; et (si c'est ce que tu voulais dire) ta Dll ne sera pas dépendante de ton appli.
 
edit: correction de tags (j'ai un peu de mal, désolé)


 
Au contraire si la Dll qui est chargée explicitement a une dependance implicite vis a vis de l'executable qui la charge, alors elle peut importer des classes en provenances de cet executables, si elle utilise ces classes pour en faire des heritages, l'executable peut les reutiliser par polymorphisme et la dependance est inversee : celui qui charge explicitement ne dependant pas de celui qu'il charge...

Reply

Marsh Posté le 28-03-2003 à 15:26:15    

chrisbk a écrit :


peinard, a nouveau en stage en allemagne pas loin de la plage, boulot sympa, collocs sympa, bref, ca roule tranquille !


 
Ben moi une tetrachiee de bugs qui est entrée...
du coup la grosse bourre...
 
La on sort un peu la tete, y a plus de bugs qui rentrent... enfin nos gentil developpeurs font une release dans un semaine... donc une semaine de repis avant une nouvelle vague de bugs... C'est ca la maintenance... ;)

Reply

Marsh Posté le 29-03-2003 à 16:13:37    

BENB a écrit :


 
Ben moi une tetrachiee de bugs qui est entrée...
du coup la grosse bourre...
 
La on sort un peu la tete, y a plus de bugs qui rentrent... enfin nos gentil developpeurs font une release dans un semaine... donc une semaine de repis avant une nouvelle vague de bugs... C'est ca la maintenance... ;)


 
Euh, tu fais quoi dans la vie ? debugueur ?  :??:

Reply

Marsh Posté le 31-03-2003 à 13:10:18    

Responsable maintenance...
 
On recupere les clients pas contents, et leur rapport d'anomalie, et au choix, on leur explique comment utiliser leur logiciel, ou on valide une anomalie.
 
Si on valide une anomalie, on fait une recherche d'anteriorite :
Existe deja, ou a deja existé sur ce produit ou un autre
 
Un recherche de regression : de quelle version date cette anomalie, est-elle presente sur les nouvelles versions
 
Une fois quer l'on a toutes ces infos on commence l'investigation : trouver l'origine de l'erreur...
 
Si l'erreur est simple, on corrige, on revalide, sinon on refile le bébé aux developpeurs du produit...
 
et on tient le client au courant...

Reply

Marsh Posté le 16-04-2004 à 18:13:49    

oui mais vous faites comment exactement pour inclure la dll dans la dll?
 
precision 1), c'est dédié pour du C, en faite pour rendre gdiplus facilement utilisable en C.
 
precision 2) une autre dll a inclure a des fonctions surchargées, et ma dll qui inclue les deux autres va egalement en avoir (enfin si tout ca est possible ca m'arrangerai grandement.)
 
perso je debute completement, et j'employe la methode suivante (apparemment du loadtime) :
 
#include "gdiplus.h"
 
et dans les propriétés du projet (sous visual), editeur de lien, entrée, dependance supplementaire je lui colle gdiplus.lib
 
dans une classe ou un code tout bete ca fonctionne, parcontre si je fais ca dans ma dll j'obtiens tellement d'erreurs que la compil s'arrette, en bref il ne digere pas du tout la dll a inclure dans la dll.

Reply

Marsh Posté le    

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed