Containers Should Not Query for IOleInPlaceActiveObject (98678)
The information in this article applies to:
- Microsoft OLE Libraries for Windows and Win32s 2.0
- Microsoft OLE Libraries, when used with:
- the operating system: Microsoft Windows NT 3.5
- the operating system: Microsoft Windows NT 3.51
- the operating system: Microsoft Windows NT 4.0
- the operating system: Microsoft Windows 95
- the operating system: Microsoft Windows 2000
This article was previously published under Q98678
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.
Modification Type: | Minor | Last Reviewed: | 3/3/2005 |
---|
Keywords: | kbInplaceAct KB98678 |
---|
|