Подскажите как реализвать на первый взгляд очень примитивный пример, все что я хочу это просто прочитать из файл и вывисти сообщение
Вот так я читаю из файла, вроде все читаеться
HBufC8* ReadOpenFileL(const TDesC& aFile)
{
RFs fs;
User::LeaveIfError(fs.Connect());
CleanupClosePushL(fs);
RFile file;
TInt iErr1=file.Open(fs,aFile,EFileRead);
if(iErr1==KErrNone)
{
TInt iSize;
file.Size(iSize);
HBufC8* buffer = HBufC8::NewLC(iSize);
TPtr8 ptr= buffer->Des();
file.Read(ptr);
file.Close();
//CleanupStack::PopAndDestroy(buffer);
return buffer;
}
fs.Close();
CleanupStack::PopAndDestroy(&fs); // destroy fs
}
потом я пытаюсь полученые данные вывисти в CAknInformationNote
CAknInformationNote* informationNote;
informationNote = new ( ELeave ) CAknInformationNote;
HBufC8* text= ReadOpenFileL(KMyFileName);
informationNote->ExecuteLD(*text); // но тут ошибка, типа не совпадение типов, оно хочет что бы я туда передал TDesC16, но я немогу понять как єто сделать.
Естественно не будет работать, потому что не совпадают базовые классы.
Location: UTF.H
Class CnvUtfConverter
Нужно сконвертировать в 16-битный дескриптор.
Здравствуйте, NewLC, Вы писали:
NLC>Естественно не будет работать, потому что не совпадают базовые классы.
NLC>Location: UTF.H
NLC>Class CnvUtfConverter
NLC>Нужно сконвертировать в 16-битный дескриптор.
NLC>
или можешь сам написать
void DesConverter8to16(const TDesC8& from, TDes16& to )
{
TInt i = 0;
TInt j = 0;
to.FillZ();
while(j < from.Length() ){
to[i++] |= from[j++] & 0xff;
}
to.SetLength( from.Length() );
}
а вообще используй RBuf вместо HBufC*
а ещё проще ...
у дескрипторов есть вагон перегруженных фкнкций Copy — так что вообще можно ничего не конвертировать а просто подставить в Copy(TDesC8&) и всё
Вообще то тут все надо переделать.
Программа свалится после вызова функции.
1) зачем использовать HBuf буфер? Если нужно вывести в Info Note, значит размер данных маленький и
достаточно TBuf.
2) Return перенесите в конец функции. Вы не освобождаете cleanup stack.
Как минимум перед выходом за собой надо было оттуда убрать буфер и fs. Иначе программа закроется.