自己编写了一个组件,该组件中有一个属性是一ADO.Resultset对象,我将该对象转换为IDispatch后返回给vbs使用,但是vbs却无法操作该对象,请问要如何返回Resultset对象vbs才能正确访问?急!!!!!!!!!!!!!!!!!!!!!!!!!!

解决方案 »

  1.   

    我的接口其中一部分是这样定义的:interface IOfficeShell : IDispatch
    {
    [propget, id(1), helpstring("外壳对象实体")] HRESULT Body([out, retval] IDispatch* *pVal);
    [propput, id(1), helpstring("外壳对象实体")] HRESULT Body([in] IDispatch* newVal);
    };函数实现
    STDMETHODIMP COfficeShell::get_Body(IDispatch **pVal)
    {
    // TODO: Add your implementation code here
    IDispatch *pDisp; m_pResultset->QueryInterface(__uuidof(IDispatch), (LPVOID*)&pDisp);
    *pVal = pDisp;
    return S_OK;
    }但是返回后vbs并不认识这个IDispatch是Resultset,但是在接口中又无法申明Body的返回参数是Resultset对象。请问如何能实现返回能够让vbs知道的Resultset对象。
      

  2.   

    STDMETHODIMP CDataAccessor::GetRecordSet(IUnknown** NativeRecordSet)
    {
       if (NativeRecordSet == NULL)
          return E_INVALIDARG;   // Note that ADO provides the ADORecordsetConstructionPtr:
       ADORecordsetConstructionPtr spConsPtr;
       spConsPtr = m_spADORecordset;   spConsPtr->get_Rowset(NativeRecordSet);   return S_OK;
    }
      

  3.   

    我是想问需要在idl中如何定义才能够被IE中的vbs识别为Resultset对象
      

  4.   

    我是想问需要在idl中如何定义才能够被IE中的vbs识别为Resultset对象
      

  5.   

    STDMETHODIMP CDataAccessor::GetRecordSet(VARIANT *pRes)
    {
       HRESULT hr = E_FAIL;
       //
       if(VT_NULL == pRes) return E_INVALIDARG;
       _RecordsetPtr obj;
       hr = obj.CreateInstance(__uuidof(Recordset);
       if(SUCCEEDED(hr))
       {
          //其他操作...
          pRes->vt = VT_DISPATCH;
          obj->QueryInterface(IID_IDispatch, (void **)&pRes->pdispVal);
          hr = S_OK;
       }
       return hr;
    }VB script 调用:
    Dim res
    set res = xxx.GetRecordSet()
    res即为Resultset对象
      

  6.   

    谢谢 AccessCSDN(筛沙子的民工) 分全给你。