Voir utilisation de processus

kidpigeyre Messages postés 96 Date d'inscription mardi 3 juillet 2001 Statut Membre Dernière intervention 2 novembre 2006 - 7 juin 2004 à 11:05
kidpigeyre Messages postés 96 Date d'inscription mardi 3 juillet 2001 Statut Membre Derniè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.

Comment le savoir? et voir par ki?

Merci

kidpigeyre

16 réponses

BruNews Messages postés 21040 Date d'inscription jeudi 23 janvier 2003 Statut Modérateur Dernière intervention 21 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.

ciao...
BruNews, Admin CS, MVP Visual C++
0
kidpigeyre Messages postés 96 Date d'inscription mardi 3 juillet 2001 Statut Membre Dernière intervention 2 novembre 2006
7 juin 2004 à 11:19
La elle est chargé dans un processus et utilisé (celle ki est chargée) dans un autre processus sans être rechargée.

Elle doit être encore en utilisation lors de la libération.

kidpigeyre
0
ymca2003 Messages postés 2070 Date d'inscription mardi 22 avril 2003 Statut Membre Dernière intervention 3 juillet 2006 7
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 ?)
0
kidpigeyre Messages postés 96 Date d'inscription mardi 3 juillet 2001 Statut Membre Derniè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
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
ymca2003 Messages postés 2070 Date d'inscription mardi 22 avril 2003 Statut Membre Dernière intervention 3 juillet 2006 7
7 juin 2004 à 11:40
l'access violation se fait lors de l'appel à freelibrary où plus-tard dans le code ?
0
kidpigeyre Messages postés 96 Date d'inscription mardi 3 juillet 2001 Statut Membre Derniè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)

kidpigeyre
0
ymca2003 Messages postés 2070 Date d'inscription mardi 22 avril 2003 Statut Membre Dernière intervention 3 juillet 2006 7
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
0
kidpigeyre Messages postés 96 Date d'inscription mardi 3 juillet 2001 Statut Membre Dernière intervention 2 novembre 2006
7 juin 2004 à 11:54
voila ce kil maffiche lors de l'erreur dans mon call stack :

KERNEL32! bff8ac13()

je vois pas trop ce que ça représente.

voici la dll main du dll en question :

#include <windows.h>
#include "./dna/srllib.h" // Dialogic header files
#include "./dna/dxxxlib.h"
#include "../alertes/alertes.h"
#include "dialogic.h"

HINSTANCE hmodule;

BOOL APIENTRY DllMain(HINSTANCE hModule,
DWORD ul_reason_for_call,
LPVOID lpReserved)
{
switch( ul_reason_for_call )
{
case DLL_PROCESS_ATTACH:
hmodule=hModule;
break;
case DLL_THREAD_ATTACH:
break;
case DLL_THREAD_DETACH:
break;
case DLL_PROCESS_DETACH:
break;
}
return TRUE;
}

j'ai réalisé un point d'arrêt sur le dll_process_detach, il y passe puis quitte la fonction du dll main et ensuite bug.
kidpigeyre
0
ymca2003 Messages postés 2070 Date d'inscription mardi 22 avril 2003 Statut Membre Dernière intervention 3 juillet 2006 7
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
0
kidpigeyre Messages postés 96 Date d'inscription mardi 3 juillet 2001 Statut Membre Dernière intervention 2 novembre 2006
7 juin 2004 à 14:05
non il n'y a rien d'autre
uniquement cette ligne

kidpigeyre
0
kidpigeyre Messages postés 96 Date d'inscription mardi 3 juillet 2001 Statut Membre Dernière intervention 2 novembre 2006
7 juin 2004 à 15:18
lors du désassemblage il me fait une erreur sur :

10001C49 call dword ptr [__imp__FreeLibrary@4(0x100050f0)]

je suis pas expert en assembleur. si quelqu'un peut m'aider. merci.

idpigeyre
0
kidpigeyre Messages postés 96 Date d'inscription mardi 3 juillet 2001 Statut Membre Dernière intervention 2 novembre 2006
8 juin 2004 à 07:51
Même en mettant le freelibrary juste après le loadlibrary, il bug, je pense que le problème vient de la dllmais d'ou??? :s

kidpigeyre
0
kidpigeyre Messages postés 96 Date d'inscription mardi 3 juillet 2001 Statut Membre Dernière intervention 2 novembre 2006
8 juin 2004 à 08:59
Réctif, lorsque je fais le freelibrary juste aprè le loadlibrary , cela marche

kidpigeyre
0
kidpigeyre Messages postés 96 Date d'inscription mardi 3 juillet 2001 Statut Membre Dernière intervention 2 novembre 2006
8 juin 2004 à 09:03
otant pr moi joré mieu fai de me taire si ça bug justement
kidpigeyre
0
ymca2003 Messages postés 2070 Date d'inscription mardi 22 avril 2003 Statut Membre Dernière intervention 3 juillet 2006 7
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.
0
kidpigeyre Messages postés 96 Date d'inscription mardi 3 juillet 2001 Statut Membre Derniè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.

J'ai Win98 et directx 8.1

Que faire?

Mci"

kidpigeyre
0
Rejoignez-nous