一个工程中我建立了两个atl对象:
CRecord
CDataset
在CDataset中提供一个接口:GetNext(),返回CRecord,怎么做?
-------------------
class ATL_NO_VTABLE CRecord : 
public CComObjectRootEx<CComSingleThreadModel>,
public CComCoClass<CRecord, &CLSID_Record>,
public IDispatchImpl<IRecord, &IID_IRecord, &LIBID_HISDBPROVIDERLib>
{
public:
CRecord()
{
}DECLARE_REGISTRY_RESOURCEID(IDR_RECORD)DECLARE_PROTECT_FINAL_CONSTRUCT()BEGIN_COM_MAP(CRecord)
COM_INTERFACE_ENTRY(IRecord)
COM_INTERFACE_ENTRY(IDispatch)
END_COM_MAP()// IRecord
public:
STDMETHOD(get_m_strName)(/*[out, retval]*/ BSTR *pVal);
STDMETHOD(put_m_strName)(/*[in]*/ BSTR newVal);
STDMETHOD(get_m_strCode)(/*[out, retval]*/ BSTR *pVal);
STDMETHOD(put_m_strCode)(/*[in]*/ BSTR newVal);
STDMETHOD(get_m_strAddr)(/*[out, retval]*/ BSTR *pVal);
STDMETHOD(put_m_strAddr)(/*[in]*/ BSTR newVal);
private:
CString m_strAddr;
CString m_strCode;
CString m_strName;
//IPosition m_pos;
};#endif //__RECORD_H_

解决方案 »

  1.   

    还有一个CDataset,想建立一个数据集(像Ado中的Dataset一样),怎么完成?
      

  2.   

    怎么没有人来呢?是不是我没有描述清除?
    在codeguru有个例子是在vb中通过列举每一个对象
    for each record in dataset
        list.add record.name
    next
    或者像
    do while not dataset.eof
       set record = dataset.getnext()
       list.add record.name
       dataset.movenext
    loop
    我在vc中通过atl建立com对象,怎么能够实现这个功能?
    有没有例子或者相关资料?
    在线等待!
      

  3.   

    GetNext(IUnknown** ppRecorde)
    {
    ....
    }
      

  4.   

    实现和传递IDispatch就可以
    关于脚本的更多信息,参见http://expert.csdn.net/Expert/topic/2464/2464391.xml
      

  5.   

    终于来了几个带星的:)
    谢谢蒋晟和xiaohyy(醉大饿极)还有ForgottenRealm(lps)
    昨天晚上奋斗结果:
    声明了:
    #include <vector>typedef vector<CComVariant,allocator<CComVariant> > HVECTOR;然后使用
    HVECTOR *m_pvRecord;
    然后实现的时候将组件对象加入这个容器.
    如果客户端程序调用这个接口[如:Add(Record)----Record是COM组件的一个对象]
    ---------------------
    STDMETHODIMP CDataset::AddNew(LPDISPATCH lpDisptch)
    {
    AFX_MANAGE_STATE(AfxGetStaticModuleState()) // TODO: Add your implementation code here
             
    //这里如何将lpDispatch 转换为CRecord??,是否需要判断?
             //如果客户端传入的是其他的内容应该怎么处理?
             CComObject<CRecord> *pRecord;
             HRESULT hRes = CComObject<CRecord>::CreateInstance(&pRecord);
             ATLASSERT(SUCCEEDED(hRes));
             ???
             return S_OK;
    }
      

  6.   

    直接用API操纵EXCEL导出怎么弄,我为这已经大伤脑筋了,借一下东风。我做的也是一个ATL控件,没有用MFC。请楼下的多多帮忙,
    可以到http://expert.csdn.net/Expert/topic/2540/2540734.xml?temp=.5139429
    去,多多帮忙,先谢了,也谢谢楼主