老大,上面的代码错误百出呀。
1、既然要返回RECORDSET,那你又pRs->Close();,返回到VB中还能用吗?
2、返回变量应该是VARIANT类型。STDMETHODIMP CReport::Rpt_Base(VARIANT *ppRs)

解决方案 »

  1.   

    你好!你的代码有两个问题:pRs和pConn都是智能指针,Rpt_Base结束后,会自动释放,ppRs也就是Nothing。正确的代码:
    STDMETHODIMP CReport::Rpt_Base(_Recordset **ppRs)
    {
    AFX_MANAGE_STATE(AfxGetStaticModuleState())
    _RecordsetPtr  pRs  =NULL;    
    _ConnectionPtr pConn =NULL;_bstr_t szCnn("...");
    pConn.CreateInstance(__uuidof(Connection));pConn->Open(szCnn,"","",adConnectUnspecified);
    pRs.CreateInstance(__uuidof(Recordset));pRs->CursorLocation = adUseClient;
    pRs->PutRefActiveConnection(pConn);
    pRs->Open("Select * from authors",vtMissing,adOpenStatic,adLockBatchOptimistic,-1);
    pPs->PutRefActiveConnection(NULL);
    *pRs=pRs; //这句对不对?正确
    pRs->AddRef();pConn->Close();
    return S_OK;
    }
      

  2.   

    嘿嘿,所以说俺是新手嘛
    sigh,你们俩谁说的对?