如何隐蔽" IPictureDisp"到" IPicture"

时间:2013-03-03 14:35:37

标签: visual-c++ atl ole

我正在使用VC ++。

IPicture提供多种功能,例如get_HandleRenderSaveAsFile。它很容易使用。

IPictureDisp继承自IDispatch,因此它只提供invoke方法。这不友好。

现在我得到一个ocx,它只返回IPictureDisp个对象。那么有没有一种方法可以直接将IPictureDisp转换为IPicture?我对ATL/COM没有多少经验。

1 个答案:

答案 0 :(得分:3)

正如MSDN所述:

  

OLE实现

     

[...]系统提供了图片对象的标准实现。它的主要接口是IPicture和IPictureDisp。使用OleCreatePictureIndirect创建一个图片对象,并支持IPicture和IPictureDisp接口。

如果支持两种界面,IPictureDisp您可以通过常规IPicture查询QueryInterface

IPictureDisp* pPictureDisp = ...
CComQIPtr<IPicture> pPicture = pPictureDisp;

请注意,如果它不起作用且IPicture无法直接使用,您可以IPictureDisp::Invoke使用DISPID_PICT_HANDLEDISPID_PICT_RENDER来访问属性/方法。< / p>