the CComCoClass

 CComCoClass

 

CComCoClass provides methods for retrieving an object's CLSID, setting error information, and creating instances of the class. Any class registered in the object map should be derived fromCComCoClass.

提供获取一个对象的CLSID的方法,设置错误信息,并创建类的实例。任何在Object map中注册的类,都必须从CComCoClass继承而来。

它同时也为你的对象定义了默认的类工厂和聚合模型。它使用了一下的两个宏:

 

DECLARE_CLASSFACTORY        声明一个类工厂为CComClassFactory

DECLARE_AGGREgATABLE         声明你的对象可以被聚合

 

template <class T, const CLSID* pclsid = &CLSID_NULL>
class CComCoClass
{
public:
 DECLARE_CLASSFACTORY()
 DECLARE_AGGREGATABLE(T)
 typedef T _CoClass;
 static const CLSID& WINAPI GetObjectCLSID() {return *pclsid;}
 static LPCTSTR WINAPI GetObjectDescription() {return NULL;}
 static HRESULT WINAPI Error(LPCOLESTR lpszDesc,
  const IID& iid = GUID_NULL, HRESULT hRes = 0)
 {
  return AtlReportError(GetObjectCLSID(), lpszDesc, iid, hRes);
 }
 static HRESULT WINAPI Error(LPCOLESTR lpszDesc, DWORD dwHelpID,
  LPCOLESTR lpszHelpFile, const IID& iid = GUID_NULL, HRESULT hRes = 0)
 {
  return AtlReportError(GetObjectCLSID(), lpszDesc, dwHelpID, lpszHelpFile,
   iid, hRes);
 }
 static HRESULT WINAPI Error(UINT nID, const IID& iid = GUID_NULL,
  HRESULT hRes = 0, HINSTANCE hInst = _AtlBaseModule.GetResourceInstance())
 {
  return AtlReportError(GetObjectCLSID(), nID, iid, hRes, hInst);
 }
 static HRESULT WINAPI Error(UINT nID, DWORD dwHelpID,
  LPCOLESTR lpszHelpFile, const IID& iid = GUID_NULL,
  HRESULT hRes = 0, HINSTANCE hInst = _AtlBaseModule.GetResourceInstance())
 {
  return AtlReportError(GetObjectCLSID(), nID, dwHelpID, lpszHelpFile,
   iid, hRes, hInst);
 }
 static HRESULT WINAPI Error(LPCSTR lpszDesc,
  const IID& iid = GUID_NULL, HRESULT hRes = 0)
 {
  return AtlReportError(GetObjectCLSID(), lpszDesc, iid, hRes);
 }
 static HRESULT WINAPI Error(LPCSTR lpszDesc, DWORD dwHelpID,
  LPCSTR lpszHelpFile, const IID& iid = GUID_NULL, HRESULT hRes = 0)
 {
  return AtlReportError(GetObjectCLSID(), lpszDesc, dwHelpID,
   lpszHelpFile, iid, hRes);
 }
 template <class Q>
 static HRESULT CreateInstance(IUnknown* punkOuter, Q** pp)
 {
  return T::_CreatorClass::CreateInstance(punkOuter, __uuidof(Q), (void**) pp);
 }
 template <class Q>
 static HRESULT CreateInstance(Q** pp)
 {
  return T::_CreatorClass::CreateInstance(NULL, __uuidof(Q), (void**) pp);
 }
};

 

 

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值