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

📄 propertybag.cpp

📁 wince6.0 windows embedded CE windows mobile 摄像头应用程序 vedio 录像 拍照 预览
💻 CPP
字号:
#include "StdAfx.h"
#include "PropertyBag.h"

#include <Ocidl.h>
#include <oleauto.h>

//构造函数
CPropertyBag::CPropertyBag() : _refCount(1), pVar(0)
{       
}

//析构函数
CPropertyBag::~CPropertyBag()
{
	VAR_LIST *pTemp = pVar;
	HRESULT hr = S_OK;

	while(pTemp)
	{
		VAR_LIST *pDel = pTemp;
		VariantClear(&pTemp->var);
		SysFreeString(pTemp->pBSTRName);
		pTemp = pTemp->pNext;
		delete pDel;
	}

}

//属性读方法
HRESULT STDMETHODCALLTYPE
CPropertyBag::Read(LPCOLESTR pszPropName, 
				   VARIANT *_pVar, 
				   IErrorLog *pErrorLog)
{
	VAR_LIST *pTemp = pVar;
	HRESULT hr = S_OK;

	while(pTemp)
	{
		if(0 == wcscmp(pszPropName, pTemp->pBSTRName))
		{
			hr = VariantCopy(_pVar, &pTemp->var);
			break;
		}
		pTemp = pTemp->pNext;
	}
	return hr;
}

//属性写方法
HRESULT STDMETHODCALLTYPE
CPropertyBag::Write(LPCOLESTR pszPropName, 
					VARIANT *_pVar)
{
	HRESULT hr = S_OK;
	VAR_LIST *pTemp = new VAR_LIST();
	ASSERT(pTemp);

	if( !pTemp )
	{
		return E_OUTOFMEMORY;
	}

	VariantInit(&pTemp->var);
	pTemp->pBSTRName = SysAllocString(pszPropName);
	pTemp->pNext = pVar;
	pVar = pTemp;
	return VariantCopy(&pTemp->var, _pVar);
}

ULONG STDMETHODCALLTYPE 
CPropertyBag::AddRef() 
{
	return InterlockedIncrement((LONG *)&_refCount);
}

ULONG STDMETHODCALLTYPE 
CPropertyBag::Release() 
{
	ASSERT(_refCount != 0xFFFFFFFF);
	ULONG ret = InterlockedDecrement((LONG *)&_refCount);    
	if(!ret) 
		delete this; 
	return ret;
}

HRESULT STDMETHODCALLTYPE 
CPropertyBag::QueryInterface(REFIID riid, void** ppv) 
{
	if(!ppv) 
		return E_POINTER;
	if(riid == IID_IPropertyBag) 
		*ppv = static_cast<IPropertyBag*>(this);	
	else 
		return *ppv = 0, E_NOINTERFACE;

	return AddRef(), S_OK;	
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -