COM类型地狱。 Ghost编译器重写我的代码?

时间:2011-10-26 16:20:30

标签: winapi com atl

我已经研究了一个多星期的问题了,所以我可能会失明,感到沮丧,或者只是坚持不懈。请原谅我,但是......

我的班级有这个成员:

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事件。没有成功。我无法找到一个曾经做过类似事情的活人。

1 个答案:

答案 0 :(得分:2)

_COM_SMARTPTR_TYPEDEF定义了一个指针包装器类 - 您可以将其视为基本typedef IDevice *IDevicePtr,但您的IDevicePtr自动释放和自动引用除外。

你不应该传递IDevicePtr *。传递IDevice *并仅在您参考时将其包裹在IDevicePtr中;如果您想要通过引用返回,则传递IDevice **(您可以使用IDevicePtr的地址{1}}获得IDevice **)。不要试图使用IDevicePtr *作为参考回报;由于operator&重载,这将失败(这是你看到的问题)。