⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 ccomobject.h

📁 PGP8.0源码 请认真阅读您的文件包然后写出其具体功能
💻 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 + -