(1)一接口:IMath中有一个属性:Sub
则IMath->get_Sub()
{
 }中要添加用AddRef()吗?
 IMath->put_Sub()
{
}中要添加用AddRef()吗?
(2)如果IMath中有一属性(也是一个接口)为:IHome,
STDMETHODIMP IMath::get_Order(IHome **pVal)
{
}
STDMETHODIMP IMath::put_Order(IHome *newVal)
{
}
如何写

解决方案 »

  1.   

    能不能将
    STDMETHODIMP IMath::get_Order(IHome **pVal)
    {
    }
    STDMETHODIMP IMath::put_Order(IHome *newVal)
    {
    }
    代码写下。谢
      

  2.   

    // mpIHome是IMath的CoClass的一个IHome*类型的成员变量
    STDMETHODIMP IMath::get_Order(IHome **pVal)
    {
        *pVal=mIHome;
        if(mpIHome!=NULL)
        {
           mpIHome->AddRef();
        }
        return S_OK;
    }
    STDMETHODIMP IMath::put_Order(IHome *newVal)
    {
        if(mIHome!=NULL)mpIHome->Release();
        mpIHome=newVal;
        if(mpIHome!=NULL)mpIHome->AddRef();
        return S_OK;   
    }
      

  3.   

    get_Order()的实现是不是要使用
    QueryInterface(IID_Home,(void**)&pVal);来实现?
      

  4.   

    已知:mIHome在IMath中如下定义:
    private:
      IHome *mIHome;
    在构造函数中:
      CMath()
    {
      CComPtr<IHome> tmpHome;
      HRESULT hr=tmpHome.CoCreateInstance(CLSID_Home);
    if(FAILED(hr))
    return ;
    mIHome=tmpHome;
    }
    但在下面实现函数中为什么会不对呢?
    STDMETHODIMP IMath::put_Order(IHome *newVal)
    {
        if(mIHome!=NULL)
    mpIHome->Release();
        mpIHome=newVal;
        if(mpIHome!=NULL)mpIHome->AddRef();
        return S_OK;   
    }
      

  5.   

    CComPtr<IHome> tmpHome;
      HRESULT hr=tmpHome.CoCreateInstance(CLSID_Home);
    if(FAILED(hr))
    return ;
    mIHome=tmpHome;tmpHome是个智能指针,在出作用域后会释放内部的com接口指针,所以不能这样做,你应该用
    mIHome = tmpHome.Detach();
      

  6.   

    还有一问题,  我用的是 c/c++
    虽然他调用api很方便,但现在觉得用它开发界面实在太麻烦了
    想用 Delphi  或者 vb 或者 c++builder请问那一种好些(只写界面, 内核用com)???thanks