parameter problem in fire event
In my atl service with dual interface, i am calling the callback event in the
client and passing it a bstr value.
Fire_DownloadComplete(result); where result is a bstr.
this is how my Fire event is defined
HRESULT Fire_DownloadComplete(BSTR res)
{
HRESULT hr = S_OK;
T * pThis = static_cast<T *>(this);
int cConnections = m_vec.GetSize();
for (int iConnection = 0; iConnection < cConnections; iConnection++)
{
pThis->Lock();
CComPtr<IUnknown> punkConnection = m_vec.GetAt(iConnection);
pThis->Unlock();
IDispatch * pConnection = static_cast<IDispatch *>(punkConnection.p);
if (pConnection)
{
CComVariant avarParams[1];
avarParams[0] = res;
avarParams[0].vt = VT_BSTR;
CComVariant varResult;
DISPPARAMS params = { avarParams, NULL, 1, 0 };
hr = pConnection->Invoke(1, IID_NULL, LOCALE_USER_DEFAULT,
DISPATCH_METHOD, ¶ms, &varResult, NULL, NULL);
}
}
return hr;
}
At the client side my sink method is defined as follows.
BEGIN_DISPATCH_MAP(CSink, CCmdTarget)
DISP_FUNCTION(CSink, "DownloadComplete", DownloadComplete, VT_I4 , VTS_BSTR)
END_DISPATCH_MAP()
BEGIN_INTERFACE_MAP(CSink, CCmdTarget)//DIID__IXMathEvents
//INTERFACE_PART(CSink, IID_ISink, Dispatch)
INTERFACE_PART(CSink, DIID__IWebLinkHelperEvents, Dispatch)
END_INTERFACE_MAP()
/////////////////////////////////////////////////////////////////////////////
// CSink message handlers
HRESULT CSink::DownloadComplete(BSTR res)
{
MessageBox(NULL,"Finished Downloading","Download Status",NULL);
CString result(res);
AfxMessageBox(result);
isDownloadComplete = TRUE;
return S_OK;
}
The callback event is getting called but the correct value of bstr is not
getting passed. I am getting a garbage value. what could be the problem?
Please advice.
Thanks in Advance!