kidpigeyre
Messages postés96Date d'inscriptionmardi 3 juillet 2001StatutMembreDernière intervention 2 novembre 2006
-
7 juin 2004 à 11:05
kidpigeyre
Messages postés96Date d'inscriptionmardi 3 juillet 2001StatutMembreDernière intervention 2 novembre 2006
-
9 juin 2004 à 11:40
Bonjour j'aimerai savoir par qui est utilsé un processus. J'utilise Visual C++
Lors du déchargement de ma librairie dll, un access violation apparait, je pense alors que le processus est en cour d'utilisation.
BruNews
Messages postés21041Date d'inscriptionjeudi 23 janvier 2003StatutModérateurDernière intervention21 août 2019 7 juin 2004 à 11:15
Une meme dll peut tres bien etre chargee dans 2 processus differents, si elle n'a pas de section 'shared', elle ne s'en rendra meme pas compte car espaces memoires distincts.
ymca2003
Messages postés2070Date d'inscriptionmardi 22 avril 2003StatutMembreDernière intervention 3 juillet 20067 7 juin 2004 à 11:32
ça c'est pas possible, chaque processus vit dans son propre espace d'adressage, donc si un processus A charge une dll, pour qu'un process B utilise cette meme dll, il doit la charger (implicitement ou explicitement) pour l'utiliser.
Comme le dit Brunews, cette dll ne saura pas qu'elle est utilisée par 2 processus différents.
Si ton process B libère la dll alors que A l'utilise encore, cela tout très bien se passer. L'access violation doit venir d'un pointeur non valide (peut-être n'appartenent pas au bon process ?)
kidpigeyre
Messages postés96Date d'inscriptionmardi 3 juillet 2001StatutMembreDernière intervention 2 novembre 2006 7 juin 2004 à 11:37
J'ai afficher les thread dans le menu debug thread pour voir le thread lors qui réalise le loadlibrary et le freelibrary de cette librairie, c'est le même.
Ce qu'il y a détonnant c'est qu'une autre librairie chargée au même endroit, se désaloue trè bien de la mémoire sans erreur. et en utilisant les mêmes fonctions.
kidpigeyre
Vous n’avez pas trouvé la réponse que vous recherchez ?
kidpigeyre
Messages postés96Date d'inscriptionmardi 3 juillet 2001StatutMembreDernière intervention 2 novembre 2006 7 juin 2004 à 11:44
lors de lapel freelibrary mais seulement pour une des deux dll chargée, l'autre passe sans problème (les deux dll utilisent les mêmes fonctions de chargement et déchargement)
ymca2003
Messages postés2070Date d'inscriptionmardi 22 avril 2003StatutMembreDernière intervention 3 juillet 20067 7 juin 2004 à 11:49
faut voir du coté du dllmain de la dll posant problème, le code appelée lors de la libération doit être erroné (ou une variable globale de la dll à un soucis dans son destructeur).
En mode debug, lors de l'acces violation, tu doit pouvoir accéder au code posant problème. dans view->Debud->call stack, tu auras la liste des apples aux fct, tu devrais trouvé celle qui débute le problème
ymca2003
Messages postés2070Date d'inscriptionmardi 22 avril 2003StatutMembreDernière intervention 3 juillet 20067 7 juin 2004 à 12:04
y'a pas autre chose ds la fenêtre ?, normalement en descendant ds cette fenêtre tu doit poivoir trouver une fct de ton code et en double-cliquant dessus allez à la ligne de l'appel de la fct
ymca2003
Messages postés2070Date d'inscriptionmardi 22 avril 2003StatutMembreDernière intervention 3 juillet 20067 9 juin 2004 à 11:16
pour moi c'est un objet global de la dll qui a son destructeur qui plante par ex
class Ctoto
{
...
}
Ctoto myObject;
DllMain...
lors du chargement de la dll, myObject et créé et au déchargement, il est détruit. pour un peu que son destructeur pose problème, le déchargement plante.
kidpigeyre
Messages postés96Date d'inscriptionmardi 3 juillet 2001StatutMembreDernière intervention 2 novembre 2006 9 juin 2004 à 11:40
J'ai avancé un peu plsu dans le problème j'ai trouvé d'ou ça vient mais je ne sais pas comment le corriger :
"Mon problème est le suivant , les fonctions directx dx_open dx_close et toutes les autres de mon module dll empeche qu'il se décharge correctement lors de mon FreeLibrary.
Lorsque je les met en commentaire, il n'y a alors plus de problèmes.