Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
2512 connectés 

 


Dernière réponse
Sujet : [C++ & DLL pour les nuls]
seblamb 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).

Votre réponse
Nom d'utilisateur    Pour poster, vous devez être inscrit sur ce forum .... si ce n'est pas le cas, cliquez ici !
Le ton de votre message                        
                       
Votre réponse


[b][i][u][strike][spoiler][fixed][cpp][url][email][img][*]   
 
   [quote]
 

Options

 
Vous avez perdu votre mot de passe ?


Vue Rapide de la discussion
seblamb 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).
__Lolo__ question suivante : je crée un thread ds ma dll
propre ou pas propre ?
quelles précautions a prendre ?
__Lolo__ question suivante : je crée un thread ds ma dll
propre ou pas propre ?
quelles précautions a prendre ?
karlkox 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.
youdontcare le code est partagé, les données dupliquées pour chaque application.
__Lolo__ si je lance 2 applis utilisant la meme dll, celle-ci est chargée 2 fois ou partagée ?
wpk 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.
SoWhatIn22 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é.
janoscoder Si t'évites données globales, ça marche en tout cas (essayé par moi)
__Lolo__ 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:

Copyright © 1997-2025 Groupe LDLC (Signaler un contenu illicite / Données personnelles)