Containers Should Not Query for IOleInPlaceActiveObject

ID: Q98678


The information in this article applies to:
  • Microsoft OLE Libraries for Windows and Win32s, version 2.0
  • Microsoft OLE Libraries, used with:
    • Microsoft Windows NT, versions 3.5, 3.51, 4.0
    • Microsoft Windows 95
    • Microsoft Windows 2000

OLE (object linking and embedding) version 2.0 container applications should never call QueryInterface to get a pointer to the IOleInPlaceActiveObject interface. Instead, the container should AddRef() the pointer passed to IOleInPlaceUIWindow::SetActiveObject and save it until needed.

Consider the scenario in which a nested object is currently inplace active; that is, the container contains an object and this contained object in turn holds another object that is inplace active. The container has a pointer only to the "outer" object, and is not aware of the "inner" object. Calling QueryInterface to get a pointer to IOleInPlaceActiveObject is meaningless on the outer object because the outer object is not currently inplace active. The only reliable way to get a pointer to the correct IOleInPlaceActiveObject interface is through IOleInPlaceUIWindow::SetActiveObject.

Objects capable of inplace activation should guard against this case, and never return IOleInPlaceActiveObject from QueryInterface.

Additional query words: 2.00 3.50 4.00

Keywords : kbInplaceAct kbNTOS350 kbNTOS351 kbNTOS400 kbWinOS2000 kbOLE200 kbWinOS95 kbGrpCom kbDSupport
Version : WINDOWS:2.0,95; :
Platform : WINDOWS
Issue type :


Last Reviewed: October 26, 1999
© 2000 Microsoft Corporation. All rights reserved. Terms of Use.