the CComCoClass

来源:互联网 发布:sql注入处理 编辑:程序博客网 时间:2024/06/05 09:42

 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);
 }
};

 

 

 

原创粉丝点击