我已经研究了一个多星期的问题了,所以我可能会失明,感到沮丧,或者只是坚持不懈。请原谅我,但是......
我的班级有这个成员:
IDevicePtr devicePtr
函数需要(IDevicePtr * ptr)
作为参数。
我无法将devicePtr传递给它,原因很自然:
cannot convert parameter 2 from 'IDevicePtr' to 'IDevicePtr *
但是......
我也无法将& devicePtr传递给它:
compiler screams: cannot convert parameter 2 from 'IDevice **' to 'IDevicePtr *'
“Idevice **”来自哪里?当我有一个IDevicePtr对象时,如何满足“IDevicePtr *”函数参数要求?
抱歉沮丧。我花了最后一周试图在不使用ATL或MFC的情况下拦截一个COM事件。没有成功。我无法找到一个曾经做过类似事情的活人。
答案 0 :(得分:2)
_COM_SMARTPTR_TYPEDEF
定义了一个指针包装器类 - 您可以将其视为基本typedef IDevice *IDevicePtr
,但您的IDevicePtr
自动释放和自动引用除外。
你不应该传递IDevicePtr *
。传递IDevice *
并仅在您参考时将其包裹在IDevicePtr
中;如果您想要通过引用返回,则传递IDevice **
(您可以使用IDevicePtr
的地址{1}}获得IDevice **
)。不要试图使用IDevicePtr *
作为参考回报;由于operator&
重载,这将失败(这是你看到的问题)。