有一个接口的方法如下:
STDMETHOD(get_Item)(BSTR bstrVar, LPDISPATCH * ppObjReturn)

return S_OK;
}如果我想通过ppObjReturn返回一个BSTR字符串,请问如何操作?

解决方案 »

  1.   

    不能通过DISPATCH返回BSTR或其它参数,只能过能方法的参数返回要返回BSTR可以这样
    .IDL
    XXX(...,BSTR* pReturn,...).CPP
    XXX(...,BSTR* pReturn,...)
    {
       CString strReturn=_T("Result");
      ...
      *pReturn=strReturn.AllocSysString();
    }
      

  2.   

    Sorry:
    .IDL
    XXX(...,[out]BSTR* pReturn,...)
      

  3.   

    to Cline(营营):
    你的这种做法可以吗?
    我怎么编译不过去啊?
      

  4.   

    idl例子:
    [propget, id(25), helpstring("property IpAddress")] HRESULT IpAddress([out, retval] BSTR* pVal);
    [propput, id(25), helpstring("property IpAddress")] HRESULT IpAddress([in] BSTR newVal);
      

  5.   

    实现
    定义一个私有变量_ip;
    STDMETHODIMP get_IpAddress(BSTR* pVal)
    {
    *pVal = _ip;
    return S_OK;
    }
    STDMETHODIMP put_IpAddress(BSTR newVal)
    {
    _ip = newVal;
    return S_OK;
    }
      

  6.   

    .IDL
    XXX(...,[out]BSTR* pReturn,...)I agree
      

  7.   

    你作为一个[out] BSTR*参数不行么,应该可以的啊,我做过无数次都可以的
      

  8.   

    问题已解决。
    见http://seaso.blogchina.com/blog/article_26511.91187.html