1

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

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

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

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

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

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

谢谢!

4

2 回答 2

1

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

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

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

我认为这具有误导性,但是该行为旨在阻止模块被卸载。我推测它是一些用作锁定锚的原子值(因为需要一个更好的术语!)。

于 2010-09-14T07:59:14.237 回答
1

请参阅此类似问题的答案此功能用于管理进程内 COM 服务器 DLL 的所谓“锁定计数”。与锁定计数一起防止 DLL 被卸载,直到其代码和数据不再使用。DllCanUloadNow()

于 2010-09-14T08:12:28.203 回答