2009-04-15 11 views
0

J'ai une DLL qui crée une section critique globale, l'initialise et l'utilise.Éviter la réinitialisation de la section critique

Maintenant, une application tierce utilise/charge la DLL plus d'une fois, ce qui entraîne une corruption du tas.

Le appverifier me met en garde contre une

-> VÉRIFICATEUR ARRÊT 00000211: pid 0x1470: section critique est déjà initialisé. L'utilisation d'un indicateur global pour vérifier si l'objet section critique est déjà initialisé n'aide pas, aucune idée sur l'accomplissement de la même chose?

Merci

+0

duplication possible de [Initialize Critical Section une seule fois pour un processus] (http://stackoverflow.com/questions/724560/initialize-critical-section-only-once-for-a-process) –

Répondre

0

maintenant une application tierce utilise/chargement de la dll plus d'une fois

Windows ne recharge pas plusieurs fois le même DLL. Où même signifie le même chemin. Si l'application tierce charge à partir d'emplacements différents, c'est le problème.

+0

Windows peut rela même DLL plusieurs fois. Les DLL sont référencées par référence. Vous avez également des appels pour le processus et l'arrêt du démarrage du fil. Si l'application de chargement libère la bibliothèque et la recharge à nouveau, c'est tout à fait possible. Il n'indique aucun code de nettoyage sur la section critique lorsque la DLL est libérée. –

+1

La DLL ne sera pas rechargée avec un autre appel LoadLibrary, la référence sera incrémentée, mais DllMain ne sera * pas * appelée. – Richard

0

Peut-être utiliser les API "setAtom" et "getAtom"? Je sais qu'ils sont un peu "old-school" mais on ne peut jamais savoir.

Questions connexes