Figure 3: Code to activate the callback
STDMETHODIMP CScriptTip::put_Callback(VARIANT newVal) { // Verify correct argument type if ( newVal.vt != VT_NULL && newVal.vt != VT_DISPATCH ) return E_INVALIDARG; // Copy the reference value HRESULT hResult = m_vCallback.Copy(&newVal); if ( FAILED(hResult) ) return hResult; // If set to null then we are done if ( m_vCallback.vt == VT_NULL ) return S_FALSE; // If callback provided invoke it DISPPARAMS params = { NULL, NULL, 0, 0 }; CComVariant vResult; m_vCallback.pdispVal->Invoke(DISPID_VALUE, IID_NULL, LOCALE_USER_DEFAULT, DISPATCH_METHOD, ¶ms, &vResult, NULL, NULL); return S_OK; }