在具有[in] VARIANT param
的界面中,调用者是否拥有复制到其中的VARIANT?被调用者是否应该在值上调用VariantClear
(或ATL CComVariant::Attach
)以确保它被清除?是否记录了自动化内存管理规则(添加到COM memory management)?
我知道[in] VARIANT *param
是调用者拥有的指针,但是[in] VARIANT param
是一个复制到被调用者的结构,所以它有点奇怪。如果没有转让所有权,那么为什么有人甚至会使用[in] VARIANT param
来定义接口?在stdcall x86和x86_64调用约定中,它永远不适合寄存器,因此它不比[in] VARIANT *param
更有效,所以它看起来毫无意义。
我在问,因为我想知道如何实施IUIAutomationPropertyChangedEventHandler::HandlePropertyChangedEvent。