2010-09-14 5 views
1

Je travaille à l'apprentissage de l'écriture d'un contrôle COM. J'ai un exemple de projet, et il utilise les lignesCOM - qu'est-ce que _pAtlModule-> Lock() verrouille exactement?

_pAtlModule->Lock() 
_pAtlModule->Unlock() 

dans le gestionnaire OnCreate() et le gestionnaire OnDestroy() pour le contrôle COM respectivement.

Je réalise que _pAtlModule est une instance de CAtlModule - l'objet "application" (à défaut d'une meilleure description).

Mais à ma question. Que fait exactement _pAtlModule-> Lock() verrouiller? Je sais que c'est une section critique, mais qu'est-ce que cela protège? Dois-je verrouiller et déverrouiller l'objet _pAtlModule lors de l'écriture de mes contrôles COM?

merci!

Répondre

1

Sur le plan extérieur, il ne semble pas vraiment faire quelque chose de substantiel! MSDN indique "Il augmente le nombre de verrous et renvoie la valeur mise à jour, cela peut être utile pour le débogage et le suivi".

http://msdn.microsoft.com/en-US/library/9syc2105%28v=VS.80%29.aspx

Je pense que cela est trompeur cependant, le comportement est destiné à arrêter le module d'être déchargé. Je théorise que c'est une valeur atomique qui est utilisée comme une ancre de verrouillage (à défaut d'un meilleur terme!).

+0

"le comportement est destiné à empêcher le module d'être déchargé" - c'est tout à fait logique, merci! –

1

Voir this answer à a similar question Cette fonction permet de gérer ce que l'on appelle le "nombre de verrous" de la DLL du serveur COM in-proc. Avec DllCanUloadNow(), le nombre de verrous empêche la DLL d'être déchargée tant que son code et ses données ne sont plus utiles.