COM - _pAtlModule-> Lock()完全锁定了什么?

时间:2010-09-14 07:54:05

标签: c++ com atl critical-section

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

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

分别在OnCreate()处理程序和COM控件的OnDestroy()处理程序中。

我意识到_pAtlModule是CAtlModule的一个实例 - “应用程序”对象(为了更好的描述)。

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

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

谢谢!

2 个答案:

答案 0 :(得分:1)

在实际情况上,它实际上似乎没有做任何实质性的事情!

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

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

我认为这会产生误导,但这种行为旨在阻止模块被卸载。我认为它是一些用作锁定锚的原子价值(因为想要更好的术语!)。

答案 1 :(得分:1)

请参阅this answera similar question此函数用于管理进程内COM服务器DLL的所谓“锁定计数”。与DllCanUloadNow()一起,锁定计数可以防止DLL被卸载,直到其代码和数据不再使用为止。