📄 ccomobject.h
字号:
/*____________________________________________________________________________
Copyright (C) 2002 PGP Corporation
All rights reserved.
$Id: CComObject.h,v 1.3 2002/08/06 20:10:45 dallen Exp $
____________________________________________________________________________*/
#ifndef Included_CComObject_h // [
#define Included_CComObject_h
#include "pgpClassesConfig.h"
#include <objbase.h>
_PGP_BEGIN
// Class CComObject
template <typename T> class CComObject
{
NOT_COPYABLE(CComObject)
public:
CComObject(T *pObj);
CComObject(REFCLSID rclsid, LPUNKNOWN pUnkOuter, PGPUInt32 clsContext,
REFIID riid);
~CComObject();
operator T *() {return mObject;}
operator const T *() const {return mObject;}
T * operator->() {return mObject;}
const T * operator->() const {return mObject;}
T& operator*() {return *mObject;}
const T& operator*() const {return *mObject;}
T * Get() {return mObject;}
void * QueryInterface(REFIID iid) const;
private:
T *mObject;
};
// Class CComObject member functions
template <typename T>
inline
CComObject<T>::CComObject(T *pObj) : mObject(pObj)
{
}
template <typename T>
inline
CComObject<T>::CComObject(
REFCLSID rclsid,
LPUNKNOWN pUnkOuter,
PGPUInt32 clsContext,
REFIID riid) : mObject(NULL)
{
PGPUInt32 result = CoCreateInstance(rclsid, pUnkOuter, clsContext,
riid, reinterpret_cast<void **>(&mObject));
if (result != S_OK)
THROW_ERRORS(kPGPError_Win32COMOpFailed, result);
}
template <typename T>
inline
CComObject<T>::~CComObject()
{
if (IsntNull(mObject))
mObject->Release();
}
template <typename T>
inline
void *
CComObject<T>::QueryInterface(REFIID iid) const
{
pgpAssert(IsntNull(mObject));
void *pObj;
PGPUInt32 result = mObject->QueryInterface(iid, &pObj);
if (result != S_OK)
THROW_ERRORS(kPGPError_Win32COMOpFailed, result);
return pObj;
}
_PGP_END
#endif // ] Included_CComObject_h
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -