难道是幻觉——返回值问题

pekinguniver 2007-10-24 10:37:45
TPtrC Ctest1ContainerView::GetContactsNameL(const TDes &aPhoneNumber)
{
CContactDatabase* contactsDB=CContactDatabase::OpenL ();
CleanupStack::PushL (contactsDB);

CContactItemFieldDef* fields = new (ELeave) CContactItemFieldDef();
CleanupStack::PushL (fields);

fields->AppendL (KUidContactFieldPhoneNumber);
CContactIdArray* currentSel = contactsDB->FindLC (aPhoneNumber, fields);
CleanupStack::PushL (currentSel);
if ( currentSel->Count ()< 1)
{
// CleanupStack::PopAndDestroy (4, contactsDB);
TPtrC PhoneNumber(aPhoneNumber);
return PhoneNumber;
}
CContactItem* Item = contactsDB->ReadContactL ((*currentSel)[0]);
CleanupStack::PushL (Item);
CContactItemFieldSet& fieldSet=Item->CardFields ();
TInt posGivenName = fieldSet.FindNext (KUidContactFieldGivenName, 0);
TInt posFamilyName = fieldSet.FindNext (KUidContactFieldFamilyName, 0);
CContactItemField& ItemFieldGivenName = fieldSet[posGivenName];
CContactItemField& ItemFieldFamilyName = fieldSet[posFamilyName];
// if ( !(ItemFieldGivenName.IsHidden()) && !(ItemFieldGivenName.IsDisabled())
// &&!(ItemFieldFamilyName.IsHidden())&& !(ItemFieldFamilyName.IsDisabled()))
// {
CContactTextField* GivenName = ItemFieldGivenName.TextStorage ();
CleanupStack::PushL (GivenName);
CContactTextField* FamilyName = ItemFieldFamilyName.TextStorage ();
CleanupStack::PushL (FamilyName);

_LIT(KString," ");
TBuf<40> FullName(KString);
// TPtr pFullName(FullName,sizeof(FullName));
TPtrC pFullName(FullName);
FullName.Copy (FamilyName->Text ());
FullName.Append (GivenName->Text ());
_LIT(KTest, "Test Data");
CEikonEnv::Static()->InfoWinL (KTest, pFullName);
// CleanupStack::PopAndDestroy (6, contactsDB);
return pFullName;
}

我在函数里调用CEikonEnv::Static()->InfoWinL (KTest, pFullName);成功,我把pFullName返回, 但当我

然后在该程序外又一次调用如下CEikonEnv::Static()->InfoWinL (KText, GetContactsNameL (ptr)); 却显示的不是pFullName的内容, 乱码 为什么, 求高手解答 谢谢
...全文
47 3 打赏 收藏 转发到动态 举报
写回复
用AI写文章
3 条回复
切换为时间正序
请发表友善的回复…
发表回复
pekinguniver 2007-10-24
  • 打赏
  • 举报
回复
呵呵, 多谢两位指导, 问题确实如此, 已经解决了,:)
dyw 2007-10-24
  • 打赏
  • 举报
回复
改变一下接口
HBufC* Ctest1ContainerView::GetContactsNameL(const TDes &aPhoneNumber)
...
return FullName.AllocL();
anel 2007-10-24
  • 打赏
  • 举报
回复
pFullName是局部变量,函数结束即消亡

void Ctest1ContainerView::GetContactsNameL(TDes &FullName,const TDes &aPhoneNumber);

3,119

社区成员

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

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