侧边栏壁纸
博主头像
G

  • 累计撰写 84 篇文章
  • 累计创建 48 个标签
  • 累计收到 5 条评论

目 录CONTENT

文章目录

COM聚合

G
G
2020-06-17 / 0 评论 / 0 点赞 / 1,226 阅读 / 0 字 / 正在检测是否收录...

自动聚合

BEGIN_COM_MAP(CBase)
	COM_INTERFACE_ENTRY(IBase)
	COM_INTERFACE_ENTRY_AUTOAGGREGATE(IID_IDrive,m_spunkTest,CLSID_Drive)
END_COM_MAP()

	DECLARE_GET_CONTROLLING_UNKNOWN()

	void FinalRelease()
	{
		m_spunkTest.Release();
	}

public:

	CComPtr<IUnknown> m_spunkTest;

手动聚合

BEGIN_COM_MAP(CBase)
	COM_INTERFACE_ENTRY(IBase)
	COM_INTERFACE_ENTRY_AGGREGATE(IID_IDrive, m_spunkDrive)
END_COM_MAP()

	DECLARE_GET_CONTROLLING_UNKNOWN()
	DECLARE_PROTECT_FINAL_CONSTRUCT()

	HRESULT FinalConstruct()
	{
		HRESULT hr;
		hr = CoCreateInstance(CLSID_Drive, GetControllingUnknown(), CLSCTX_INPROC_SERVER, IID_IUnknown, (void**)&m_spunkDrive);
		return hr;
	}
	void FinalRelease()
	{
		m_spunkDrive.Release();
	}
public:
	CComPtr<IUnknown> m_spunkDrive;

以上两种均为计划聚合,下面的为盲目聚合
COM_INTERFACE_ENTRY_AGGREGATE_BLIND
COM_INTERFACE_ENTRY_AUTOAGGREGATE_BLIND

0

评论区