Symbian文件绑定主要是生成一个系统注册文件,用于关联(.ext)文档与系统文件管理器
实现方法如下:
///头文件
#ifndef __EXTRECOG_H__
#define __EXTRECOG_H__
#include <apmrec.h>
const TUid KEXTRecogDllUid ={ 0xEc988dac };
const TInt KEXTRecogImplementationUid = 0xe71adca0;
class CEXTRecog : public CApaDataRecognizerType
{
public:
static CApaDataRecognizerType *CreateRecognizerL();
CEXTRecog();
TUint PreferredBufSize();
TDataType SupportedDataTypeL(TInt aIndex) const;
private:
void DoRecognizeL(const TDesC &aName, const TDesC8 &aBuffer);
};
#endif /* __EXTRECOG_H__ */
///实现文件
#include <f32file.h>
#include <ImplementationProxy.h>
#include "EXTRecog.h"
static const TInt KEXTRecogDataTypeCount = 1;
_LIT8(KEXTRecogMimeType, "application/ext");
CEXTRecog::CEXTRecog() : CApaDataRecognizerType(KEXTRecogDllUid, CApaDataRecognizerType::ENormal)
{
iCountDataTypes = KEXTRecogDataTypeCount;
}
TUint CEXTRecog::PreferredBufSize()
{
return 128;
}
TDataType CEXTRecog::SupportedDataTypeL(TInt /*aIndex*/) const
{
return TDataType(KEXTRecogMimeType);
}
void CEXTRecog::DoRecognizeL(const TDesC &aName, const TDesC8& /*aBuffer*/)
{
_LIT(KDotEXT, ".EXT");
iDataType = TDataType(KEXTRecogMimeType);
iConfidence = ENotRecognized;
if (aName.Length() < 5)
{
return;
}
TInt pos = aName.LocateReverse('.');
if (pos <= 0 )
{
return;
}
TPtrC ptrc = aName.Mid(pos);
if (ptrc.Length() != 4)
{
return;
}
HBufC* ext = HBufC::NewL(4);
ext->Des().Append(ptrc);
ext->Des().LowerCase();
if(ext->CompareC(KDotEXT) == 0)
{
iConfidence = ECertain;
iDataType = TDataType(KEXTRecogMimeType);
}
delete ext;
}
const TImplementationProxy ImplementationTable[] =
{
IMPLEMENTATION_PROXY_ENTRY(KEXTRecogImplementationUid, CEXTRecog::CreateRecognizerL)
};
EXPORT_C const TImplementationProxy * ImplementationGroupProxy(TInt &aTableCount)
{
aTableCount = sizeof(ImplementationTable) / sizeof(TImplementationProxy);
return ImplementationTable;
}
CApaDataRecognizerType * CEXTRecog::CreateRecognizerL()
{
return new(ELeave) CEXTRecog();
}