[C++ & DLL pour les nuls]

[C++ & DLL pour les nuls] - Programmation

Marsh Posté le 29-06-2001 à 19:06:15    

alors quelques questions :
1/ comment on fait une dll "réentrante" (au cas ou ca s'appellerait pas comme ca, c pr faire une dll utilisable par la meme appli plusieurs fois en meme tps)
 
2/ quelles sont les précautions à prendre qd on fait une dll justement ? (variables globales, multithreading, etc)
 
merci :hello:


---------------

Reply

Marsh Posté le 29-06-2001 à 19:06:15   

Reply

Marsh Posté le 29-06-2001 à 19:14:13    

Si t'évites données globales, ça marche en tout cas (essayé par moi)


---------------
-----------------------
Reply

Marsh Posté le 29-06-2001 à 20:05:26    

2/ quelles sont les précautions à prendre qd on fait une dll justement ? (variables globales, multithreading, etc)  
 
et ben les variables globales, tu peux oublier. Je ne sais même pas si c'est faisable, mais de toute façon c'est tellement crade que faut eviter ;)))
 
multithreading: faut compiler avec les options qui vont bien.
(ex: sous visual c++: code generation: use runtime library: multithreaded)
 
1/...
une dll est "forcement" utilisable par la meme appli plusieurs fois en meme tps. Ou alors qqchose m'a échappé.

Reply

Marsh Posté le 29-06-2001 à 20:11:57    

a priori, moi je mettrais quelques mutex pour proteger les ressources partagees (handles, var globales etc.) quant a la reentrance, c'est automatique, il y a une pile de cree pour chaque appel d'une fonction de ta dll => pas de probleme de reentrance.


---------------
"Si ton labeur est dur, et si tes résultats sont minces, rappelle-toi  
Reply

Marsh Posté le 30-06-2001 à 11:11:24    

si je lance 2 applis utilisant la meme dll, celle-ci est chargée 2 fois ou partagée ?


---------------

Reply

Marsh Posté le 30-06-2001 à 11:44:15    

le code est partagé, les données dupliquées pour chaque application.

Reply

Marsh Posté le 02-07-2001 à 21:44:34    

Oui sauf pour Windows XP qui alloue un nouvel espace mémoire, c con ca.
Pour les mutex, je crois que c'est indispensable, ca évite bien des soucis.

Reply

Marsh Posté le 03-07-2001 à 09:35:17    

question suivante : je crée un thread ds ma dll
propre ou pas propre ?
quelles précautions a prendre ?

Reply

Marsh Posté le 03-07-2001 à 09:35:26    

question suivante : je crée un thread ds ma dll
propre ou pas propre ?
quelles précautions a prendre ?

Reply

Marsh Posté le 03-07-2001 à 10:06:03    

Attention aux mélanges , le mode par défaut c'est :
  Si 2 threads appartenent à une même application font appelle à une dll, les données de la dll sont partagées ( comme avec une application normale).
  Si 2 process différent appellent une dll les données sont dupliquées, le code aussi des fois (c'est windows qui choisi au chargement) mais c'est alléatoire et pas important.
 
Si tu ne veux pas partager les données dans une dll appellée par 2 threads appartenent à un même process il faut utiliser les fonction win32 ( TlsAlloc() et TlsGetValue()...)
 
Sinon ont peut partager des données dans une dll appellé par 2 process différents, sous visual c'est simple ( #pragma data_seg ...), avec borland c'est plus compliqué ( il faut utiliser des fonctions win32 ( je peux t'expliquer si ça t'interresse).


---------------
[:seblamb] Moi aussi je veux grater dédé!!!
Reply

Sujets relatifs:

Leave a Replay

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