怎样在服务器和客户端之间传递纪录集?
小弟想在数据服务器上垫一层,作个数据服务层.
由于使进程间传递,怎么返回纪录集?
书上说的例子是:
HRESULT GetRecords(BSTR strSQL, IDispatch** pVval)
{
    _RecordsetPtr pTemp;
    pTemp.CreateInstance(__uuidof(Recordset));
    pTemp->Open(strSQL,.....);
    *pVal = pTemp->Detach();
}
客户端怎么办?
我简单的写成:
_RecordsetPtr pClient;
IServerPtr pData;
pData.CreateInstance(CLSID_Server);
pData->GetRecords("provider....",reinpret_cast<IDispatch**> (&pClient));
int n = pClient->RecordCount; ////出错!!!!!!!!!

解决方案 »

  1.   

    如果直接获取时,有可能pTemp被释放,所以...
    HRESULT GetRecords(BSTR strSQL, VARIANT* pVval)
    {
        _RecordsetPtr pTemp;
        pTemp.CreateInstance(__uuidof(Recordset));
        pTemp->Open(strSQL,.....);    VARIANT vtRec;
        VariantInit(pVval);
        vtRec = VT_DISPATCH;
        vtRec.pdispVal =(IDispatch )pTemp;
        VariantCopy(pVval,&vtRec)
    }
      

  2.   

    _RecordsetPtr 是智能指针,不能通过Detach()来释放并返回COM指针。
    应写成:
        _RecordsetPtr pTemp;
        IDispatch* pDisp;
        pTemp.CreateInstance(__uuidof(Recordset));
        pTemp->Open(strSQL,.....);
        pTemp->QueryInterface(__uuidof(IDispatch),(LPVOID)pDisp);
        *pVal = pDisp->Detach();
      

  3.   

    pTemp->QueryInterface(__uuidof(IDispatch),(LPVOID*)&pDisp);