Hi, You can return a Recordset as an IDispatch pointer like this: STDMETHODIMP CMyClass::GetAllRecords(BSTR bstrSearchKey, IDispatch **output) { .... .... *output = (IDispatch*) pRecordset.Detach(); //Return recordset as IDispatch } Regards, ShadiK Shadi Al-Kahwaji