(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)
{
}
如何写
则IMath->get_Sub()
{
}中要添加用AddRef()吗?
IMath->put_Sub()
{
}中要添加用AddRef()吗?
(2)如果IMath中有一属性(也是一个接口)为:IHome,
STDMETHODIMP IMath::get_Order(IHome **pVal)
{
}
STDMETHODIMP IMath::put_Order(IHome *newVal)
{
}
如何写
STDMETHODIMP IMath::get_Order(IHome **pVal)
{
}
STDMETHODIMP IMath::put_Order(IHome *newVal)
{
}
代码写下。谢
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;
}
QueryInterface(IID_Home,(void**)&pVal);来实现?
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;
}
HRESULT hr=tmpHome.CoCreateInstance(CLSID_Home);
if(FAILED(hr))
return ;
mIHome=tmpHome;tmpHome是个智能指针,在出作用域后会释放内部的com接口指针,所以不能这样做,你应该用
mIHome = tmpHome.Detach();
虽然他调用api很方便,但现在觉得用它开发界面实在太麻烦了
想用 Delphi 或者 vb 或者 c++builder请问那一种好些(只写界面, 内核用com)???thanks