WEB开发网
开发学院软件开发VC 接触VC之四:COM组件模型基础 阅读

接触VC之四:COM组件模型基础

 2006-07-19 11:36:48 来源:WEB开发网   
核心提示: 当然,你可以使用自己的引用机制,接触VC之四:COM组件模型基础(9),只要你的行为上支持AddRef和Release,比如说,下面我要遵守它,我把上次同样东西用……省略掉了,不设置对象的引用计数,而是为每个接口设置一个引用计数

当然,你可以使用自己的引用机制,只要你的行为上支持AddRef和Release。比如说,不设置对象的引用计数,而是为每个接口设置一个引用计数。当所有的接口引用计数都为0时,delete对象。

好了,前面的示例中,我并没有遵守IUknown规范,下面我要遵守它。我把上次同样东西用……省略掉了。

// {6AAF876E-FCED-4ee0-B5D3-63CD6E2242F5}
static const GUID IID_IPhysiology =
{ 0x6aaf876e, 0xfced, 0x4ee0, { 0xb5, 0xd3, 0x63, 0xcd, 0x6e, 0x22, 0x42, 0xf5 } };
class IPhysiology:
    public IUnknown
{
public:
    ……
};
// {183FC7A1-4C27-4c38-B72D-D1326E2E8A7C}
static const GUID IID_IPsychics =
{ 0x183fc7a1, 0x4c27, 0x4c38, { 0xb7, 0x2d, 0xd1, 0x32, 0x6e, 0x2e, 0x8a, 0x7c } };
class IPsychics:
    public IUnknown
{
public:
    ……
};
// {5F144D5C-A20C-42e7-8F91-4D5CAE430B29}
static const GUID IID_IDynamics =
{ 0x5f144d5c, 0xa20c, 0x42e7, { 0x8f, 0x91, 0x4d, 0x5c, 0xae, 0x43, 0xb, 0x29 } };
class IDynamics:
    public IUnknown
{
public:
    ……
};
// {ABFA7022-7E2F-4d0e-8A4F-F58BBCEBB2DA}
static const GUID CLISID_Human =
{ 0xabfa7022, 0x7e2f, 0x4d0e, { 0x8a, 0x4f, 0xf5, 0x8b, 0xbc, 0xeb, 0xb2, 0xda } };
class human :
    public IPhysiology,
    public IPsychics,
    public IDynamics
{
public:
……
human()
{
  m_ulRef = 0;
}
HRESULT QueryInterface(const IID& iid, void **ppv)
{
  if (iid == IID_IUnknown || iid == IID_IPhysiology)
  {
    *ppv = static_cast<IPhysiology*>(this);
    (IPhysiology*)(*this))->AddRef();
  }
  else if (iid == IID_IPsychics)
  {
    *ppv = static_cast<IPsychics*>(this);
    (IPsychics*)(*this))->AddRef();
  }
  else if (iid == IID_IDynamics)
  {
    *ppv = static_cast<IDynamics*>(this);
    (IDynamics*)(*this))->AddRef();
  }
  else
  {
    *ppv = NULL;
    return E_NOTINTERFACE;
  }
  return S_OK;
}
ULONG AddRef()
{
  return ++m_ulRef;
}
ULONG Release()
{
  m_ulRef--;
  if (m_ulRef <= 0)
  {
    m_ulRef = 0;
    delete this;
  }
  return m_ulRef;
}
ULONG m_ulRef;
};

这样我们的组件对象就定义完全了。

上一页  4 5 6 7 8 9 10  下一页

Tags:接触 VC COM

编辑录入:爽爽 [复制链接] [打 印]
赞助商链接