PRB: GetControlUnknown() Returns NULL in COleControl (166767)
The information in this article applies to:
- Microsoft Visual C++, 32-bit Enterprise Edition 4.2
- Microsoft Visual C++, 32-bit Enterprise Edition 4.2b
- Microsoft Visual C++, 32-bit Enterprise Edition 5.0
- Microsoft Visual C++, 32-bit Enterprise Edition 6.0
- Microsoft Visual C++, 32-bit Professional Edition 4.2
- Microsoft Visual C++, 32-bit Professional Edition 4.2b
- Microsoft Visual C++, 32-bit Professional Edition 5.0
- Microsoft Visual C++, 32-bit Professional Edition 6.0
- Microsoft Visual C++, 32-bit Learning Edition 6.0
This article was previously published under Q166767 SYMPTOMS
When you call GetControlUnknown() from inside a COleControl-derived class,
it always returns NULL.
CAUSE
The function CWnd::GetControlUnknown() should be called from the control
container.
RESOLUTION
Call CCmdTarget::GetControllingUnknown() instead of
CWnd::GetControlUnknown().
STATUS
This behavior is by design.
MORE INFORMATION
CWnd::GetControlUnknown() can be called to check if the CWnd is being used
as a proxy, or wrapper, for a contained Activex control. It does this by
checking the m_pCtrlSite CWnd member to see if it's NULL or not. If
m_pCtrlSite is NULL, then NULL is returned. Since m_pCtrlSite is only set
when the CWnd represents a contained ActiveX control, m_pCtrlSite will
always be NULL if GetControlUnknown() is called from inside an ActiveX
control's source.
CCmdTarget::GetControllingUnknown() can be used to get the IUnknown of the
outer, or controlling, object from within an object which is being
aggregated. If the object is not being aggregated then
CCmdTarget::GetControllingUnknown() simply returns the object's own
IUnknown.
Note that CCmdTarget::GetControllingUnknown() is an undocumented function
and may change in future versions of MFC.
Modification Type: | Major | Last Reviewed: | 12/1/2003 |
---|
Keywords: | kbCtrl kbInprocSvr kbprb KB166767 |
---|
|