// Codec.cpp // // Example code to show how to load a UniFEP codec (old procedure) // // Otfried Cheong, 2000 // #include #include #include #include "ufcodec.h" class CShiftJisConverter : public CBase { public: static CShiftJisConverter *NewL(RFs &aFs); ~CShiftJisConverter(); CUniEncoder *Codec() const { return iCodec; } private: void ConstructL(RFs &aFs); CUniEncoder *iCodec; RLibrary iDll; }; CShiftJisConverter::~CShiftJisConverter() { delete iCodec; iDll.Close(); } CShiftJisConverter *CShiftJisConverter::NewL(RFs &aFs) { CShiftJisConverter *This = new (ELeave) CShiftJisConverter; This->ConstructL(aFs); return This; } void CShiftJisConverter::ConstructL(RFs &aFs) { TUidType aSjisUidType(KDynamicLibraryUid, KUniEncoderUid, KEncodingUidShiftJIS); TFileName aEncodingDir = _L("!:\\System\\UniFEP\\Encoding\\*.dll"); iCodec = 0; TInt drive = 'z'; do { drive--; if (drive < 'a') drive = 'z'; aEncodingDir[0] = TText8(drive); CDir *fileList = 0; if (aFs.GetDir(aEncodingDir, aSjisUidType, ESortByName, fileList) == KErrNone && fileList->Count() > 0) { TParse parse; parse.Set((*fileList)[0].iName, &aEncodingDir, NULL); iDll.Load(parse.FullName()); TLibraryFunction entry = iDll.Lookup(1); iCodec = (CUniEncoder *) ((*entry)()); if (!iCodec) { iDll.Close(); User::Leave(KErrGeneral); } } delete fileList; } while (iCodec == 0 && drive != 'z'); if (!iCodec) User::Leave(KErrNotFound); }