我正在学习编写COM控件。我有一个示例项目,它使用行
_pAtlModule->Lock()
_pAtlModule->Unlock()
分别在OnCreate()处理程序和COM控件的OnDestroy()处理程序中。
我意识到_pAtlModule是CAtlModule的一个实例 - “应用程序”对象(为了更好的描述)。
但对我的问题。究竟_pAtlModule-> Lock()锁定了什么?我知道这是一个关键部分,但它保护什么?
编写COM控件时,是否必须锁定和解锁_pAtlModule对象?
谢谢!
答案 0 :(得分:1)
在实际情况上,它实际上似乎没有做任何实质性的事情!
MSDN说“它会增加锁定计数并返回更新的值;这可能对调试和跟踪很有用”。
http://msdn.microsoft.com/en-US/library/9syc2105%28v=VS.80%29.aspx
我认为这会产生误导,但这种行为旨在阻止模块被卸载。我认为它是一些用作锁定锚的原子价值(因为想要更好的术语!)。
答案 1 :(得分:1)
请参阅this answer到a similar question此函数用于管理进程内COM服务器DLL的所谓“锁定计数”。与DllCanUloadNow()
一起,锁定计数可以防止DLL被卸载,直到其代码和数据不再使用为止。