请教ATL中的一段代码有什么含义

leechiyang leechiyang 墨衍会员 · AI 创作全网分发 墨衍智能分发 通过墨衍一键同步至各平台 可同步平台 CSDN微信公众号微博知乎掘金百家号博客园抖音小红书 你的文章也可以这样分发 墨衍会员 ¥399起/年,写一次发全网 我也要 + 加入社区
ATL 中有如下代码:
[code=c/c++]

//////////////////////////////////////////////////////////////////////////////
// IObjectWithSite
//
template <class T>
class ATL_NO_VTABLE IObjectWithSiteImpl : public IObjectWithSite
{
public:
virtual ~IObjectWithSiteImpl()
{
}

STDMETHOD(SetSite)(IUnknown *pUnkSite)
{
ATLTRACE(atlTraceCOM, 2, _T("IObjectWithSiteImpl::SetSite\n"));
T* pT = static_cast<T*>(this);
pT->m_spUnkSite = pUnkSite;
return S_OK;
}
STDMETHOD(GetSite)(REFIID riid, void **ppvSite)
{
ATLTRACE(atlTraceCOM, 2, _T("IObjectWithSiteImpl::GetSite\n"));
T* pT = static_cast<T*>(this);
ATLASSERT(ppvSite);
HRESULT hRes = E_POINTER;
if (ppvSite != NULL)
{
if (pT->m_spUnkSite)
hRes = pT->m_spUnkSite->QueryInterface(riid, ppvSite);
else
{
*ppvSite = NULL;
hRes = E_FAIL;
}
}
return hRes;
}

HRESULT SetChildSite(IUnknown* punkChild)
{
if (punkChild == NULL)
return E_POINTER;

HRESULT hr;
CComPtr<IObjectWithSite> spChildSite;
hr = punkChild->QueryInterface(__uuidof(IObjectWithSite), (void**)&spChildSite);
if (SUCCEEDED(hr))
hr = spChildSite->SetSite((IUnknown*)this);

return hr;
}

static HRESULT SetChildSite(IUnknown* punkChild, IUnknown* punkParent)
{
return AtlSetChildSite(punkChild, punkParent);
}

CComPtr<IUnknown> m_spUnkSite;
};

[/code]

作用不难明白,但是SetSite中
T* pT = static_cast<T*>(this);
pT->m_spUnkSite = pUnkSite;
和
this->spUnkSite = pUnkSite;
有什么区别呢?
为什么要这么写,有什么好处?
...全文

相关推荐

ICESAT-2 +ATL03 + ATL08

适合人群: 对森林、地形、冰川等地物高度研究的人群 如何将星载lidar ICESAT-2的atl8和atl3结合,综合利用地理定位信息与地面高度信息

林业遥感

杨老师详解ATL代码实践教程

在现代软件开发中,组件对象模型(COM)技术是一种跨平台、语言无关的接口标准,它允许软件组件通过定义明确的接口进行交互。而活动模板库(ATL)则是一种用于简化COM组件开发的C++模板库。本文将引领您了解ATL和COM组件创建的基本流程和关键概念,为深入探索其在实际项目中的应用奠定坚实基础。ATL(Active Template Library)是一个由Microsoft提供的模板类库,旨在帮助开发者快速构建轻量级的COM组件。

长野君

ATL Internals 源代码学习指南

本文还有配套的精品资源,点击获取 简介:《ATL Internals》是一本深入剖析微软Active Template Library(ATL)的书籍,它详细讲解了ATL的核心概念、设计模式及技术细节,并配以示例源代码以增强学习体验。ATL是一个轻量级的C++库,专门用于创建高效的COM对象,提供了丰富的模板类和宏以简化COM接口的实现。本书涵盖COM基础、类工厂、简单对象...

柴犬小管家

Atl编程指南源代码

《Atl编程指南》 所附源码,里面包括所有的例子

woodey

什么是ATL活动模板库

ATL,Active Template Library活动模板库,是一种微软程序库

x293563351
评论 7
收藏 已收藏
分享
返回顶部
leechiyang
ATL 3,248 成员 48,530 内容