symbian TRAP(r, rdsIniFile.ReadL(buf)); 异常退出

sanjiaomao 2010-04-24 02:13:09
我在做读写INI文件的例子

TBool CMD5testAppUi::ReadIniFile(TUid info, void *ptr, TUint &size)
{
TInt r;
TBool result = EFalse;
RFs fs;
fs.Connect();
CleanupClosePushL(fs);
RDictionaryReadStream rdsIniFile;
CDictionaryStore *cdIniFile = Application()->OpenIniFileLC(fs);
if (cdIniFile->IsPresentL(info))
{
rdsIniFile.OpenLC(*cdIniFile, info);
TPtr8 buf((TUint8*) ptr, size);
TRAP(r, rdsIniFile.ReadL(buf));

CleanupStack::PopAndDestroy(); // rdsIniFile
result = ETrue;
}
CleanupStack::PopAndDestroy(2); // fs, cdIniFile
return result;

}

我在用时:
TUint aInd = 34;
TUid testuid =
{
0x0bdf1366
};
HBufC8* str;

ReadIniFile(testuid,str,aInd);
当执行到TRAP(r, rdsIniFile.ReadL(buf));时出现异常:PANIC KERN-EXEC 3

请教高手,这是怎么回事啊,是不是buf的问题
...全文
253 6 打赏 收藏 转发到动态 举报
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
Atoric 2010-04-27
  • 打赏
  • 举报
回复
void CIniFileEngine::ConstructL()
{
User::LeaveIfError(iFs.Connect());

iDicStore = CEikonEnv::Static()->EikAppUi()->Application()->OpenIniFileL(iFs);
}

void CIniFileEngine::WriteIniFileL(TUid aUid, const TDesC& aWriteBuffer)
{
RDictionaryWriteStream writeStream;

writeStream.AssignLC(*iDicStore, aUid);
writeStream << aWriteBuffer;
writeStream.CommitL();
CleanupStack::PopAndDestroy(); // writeStream

iDicStore->CommitL();
}

TBool CIniFileEngine::ReadIniFileL(TUid aUid, TDes& aReadBuffer)
{
TBool ret = EFalse;

if (iDicStore->IsPresentL(aUid))
{
RDictionaryReadStream readStream;

readStream.OpenLC(*iDicStore, aUid);
readStream >> aReadBuffer;
CleanupStack::PopAndDestroy(); // readStream
ret = ETrue;
}

return ret;
}
zhaopeng3 2010-04-26
  • 打赏
  • 举报
回复
是否满足条件if (cdIniFile->IsPresentL(info))
sanjiaomao 2010-04-26
  • 打赏
  • 举报
回复
TUint aInd = 34;
TUid testuid =
{
0x0bdf1366
};

HBufC8* str=HBufC8::NewLC(34);

CleanupStack::Pop();

ReadIniFile(testuid,str,aInd);
我刚给str分配了空间,可是在调用时,
现在能读,运行TBool CMD5testAppUi::ReadIniFile(TUid info, void *ptr, TUint &size)
中的CleanupStack::PopAndDestroy(2); // fs, cdIniFile出错,KERN EXEC 0
zhaopeng3 2010-04-26
  • 打赏
  • 举报
回复
1. 首先得到文件的大小size
2. HBufC8* str = HBufC8::NewLC(size);
sanjiaomao 2010-04-26
  • 打赏
  • 举报
回复
多谢您的回答
请问我应该怎样初始化HBufC8* str;呢?

我觉得TBool CMD5testAppUi::ReadIniFile(TUid info, void *ptr, TUint &size)
这个函数读出的ini文件应该被保存在 ptr,我的理解对吗?
我要想获得INI内容,只要看ptr就可以了,对吗
请指教
dyw 2010-04-25
  • 打赏
  • 举报
回复
HBufC8* str; // 没有初始化?从而导致指针错误...

另外,ReadIniFile的函数原型可以改为
TBool CMD5testAppUi::ReadIniFile(TUid info, TDes8& aDes);

Symbian字符串描述符本身就包含buffer长度。

3,119

社区成员

发帖
与我相关
我的任务
社区描述
塞班系统(Symbian系统)是塞班公司为手机而设计的操作系统,它的前身是英国宝意昂公司的 EP ( Electronic Piece of cheese)操作系统。
社区管理员
  • Symbian社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧