Microsoft KB Archive/166767

= PRB: GetControlUnknown Returns NULL in COleControl =

Article ID: 166767

Article Last Modified on 12/1/2003

-

APPLIES TO


 * Microsoft Visual C++ 4.2 Enterprise Edition
 * Microsoft Visual C++ 4.2 Enterprise Edition
 * Microsoft Visual C++ 5.0 Enterprise Edition
 * Microsoft Visual C++ 6.0 Enterprise Edition
 * Microsoft Visual C++ 4.2 Professional Edition
 * Microsoft Visual C++ 4.2 Professional Edition
 * Microsoft Visual C++ 5.0 Professional Edition
 * Microsoft Visual C++ 6.0 Professional Edition
 * Microsoft Visual C++ 6.0 Standard Edition

-



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.

Keywords: kbinprocsvr kbprb kbctrl KB166767

-

[mailto:TECHNET@MICROSOFT.COM Send feedback to Microsoft]

© Microsoft Corporation. All rights reserved.