C++ COM-什么是_pAtlModule->;确切地说是锁吗?

C++ COM-什么是_pAtlModule->;确切地说是锁吗?,c++,com,atl,critical-section,C++,Com,Atl,Critical Section,我正在学习编写COM控件。我有一个示例项目,它使用了 _pAtlModule->Lock() _pAtlModule->Unlock() 分别在COM控件的OnCreate()处理程序和OnDestroy()处理程序中 我意识到_pAtlModule是CAtlModule的一个实例,即“application”对象(因为缺少更好的描述) 但我的问题是。什么是_pAtlModule->Lock()锁?我知道这是一个关键部分,但它保护什么 在编写COM控件时,是否必须锁定和解锁_pAt

我正在学习编写COM控件。我有一个示例项目,它使用了

_pAtlModule->Lock()
_pAtlModule->Unlock()
分别在COM控件的OnCreate()处理程序和OnDestroy()处理程序中

我意识到_pAtlModule是CAtlModule的一个实例,即“application”对象(因为缺少更好的描述)

但我的问题是。什么是_pAtlModule->Lock()锁?我知道这是一个关键部分,但它保护什么

在编写COM控件时,是否必须锁定和解锁_pAtlModule对象


谢谢

从表面上看,它实际上似乎没有做任何实质性的事情

MSDN说“它增加锁计数并返回更新的值;这可能对调试和跟踪有用”


我认为这有误导性,但是,该行为旨在阻止卸载模块。我从理论上推断,它是用作锁锚的某个原子值(因为缺少更好的术语!)。

请注意,此函数用于管理进程内COM服务器DLL的所谓“锁计数”。与
DllCanUloadNow()
一起,锁计数可防止DLL卸载,直到其代码和数据不再使用。

“该行为旨在阻止卸载模块”-这非常合理,谢谢!