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

📄 shaperesolver.cpp

📁 Symbian S60下使用ECom的例子,适合初学者理解ECom框架
💻 CPP
字号:
/**
*
* @brief Definition of CShapeResolver
*
* Copyright (c) EMCC Software Ltd 2003
* @version 1.0
*/

// Class Includes
#include "shapeResolver.h"

// System Includes
#include <ecom.h>
#include <ecomerrorcodes.h>
#include <ecomresolverparams.h>
#include <implementationinformation.h>
#include <publicregistry.h>


CShapeResolver* CShapeResolver::NewL (MPublicRegistry& aRegistry)
	{
	return new(ELeave) CShapeResolver (aRegistry);
	}




CShapeResolver::~CShapeResolver()
	{
	}




CShapeResolver::CShapeResolver (MPublicRegistry& aRegistry) :
	CResolver (aRegistry)
	{
	}




TUid CShapeResolver::IdentifyImplementationL (TUid aInterfaceUid,
	const TEComResolverParams& aAdditionalParameters) const
	{
	RImplInfoArray& implementationsInfo = iRegistry.ListImplementationsL (aInterfaceUid);
	TUid found = KNullUid;

	if (implementationsInfo.Count())
		{
		found = Resolve (implementationsInfo, aAdditionalParameters);
		}
	return found;
	}




TUid CShapeResolver::Resolve (const RImplInfoArray& aImplementationsInfo,
	const TEComResolverParams& aAdditionalParameters) const
	{
	const TInt count = aImplementationsInfo.Count();
	for (TInt i = 0; i < count; ++i)
		{
		const CImplementationInformation& impData = *aImplementationsInfo[i];

		if (Match (impData.DataType(), aAdditionalParameters.DataType(),
			aAdditionalParameters.IsWildcardMatch()))
			{
			return impData.ImplementationUid();
			}
		}

	return KNullUid;
	}




RImplInfoArray* CShapeResolver::ListAllL (TUid aInterfaceUid,
	const TEComResolverParams& aAdditionalParameters) const
	{
	RImplInfoArray* retList = new(ELeave) RImplInfoArray;
	CleanupStack::PushL (retList);

	RImplInfoArray& fullList = iRegistry.ListImplementationsL (aInterfaceUid);

	const TBool useWildcards = aAdditionalParameters.IsWildcardMatch();
	const TDesC8& matchType = aAdditionalParameters.DataType();
	const TInt numImps = fullList.Count();

	for (TInt i = 0; i < numImps; ++i)
		{
		if (Match (fullList[i]->DataType(), matchType, useWildcards))
			{
			User::LeaveIfError (retList->Append (fullList[i]));
			}
		}

	CleanupStack::Pop (retList);

	return retList;
	}




TBool CShapeResolver::Match (const TDesC8& aImplementationType,
	const TDesC8& aMatchType, TBool aUseWildcards) const
	{
	TInt matchPos = KErrNotFound;

	if (aUseWildcards)
			matchPos = aImplementationType.MatchF (aMatchType);
	else
			matchPos = aImplementationType.CompareF (aMatchType);

	return matchPos != KErrNotFound;
	}


⌨️ 快捷键说明

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