Re: Reentrancy issue
[I missed the start of this thread, just commenting on what's below]
Actually, it looks like he's returning a reference to a member variable -
that's ok. The Format call is _definitely_ wrong. A "%s" in Format()
CANNOT take a CString. You must use the operator LPCTSTR() method on
CString (cast CString to an LPCTSTR)
However, that said, since the OP is re-using the same variable for each
call, it's unlikely he'll get what he wants. It's going to depend on
order of evaluation.
Dave Connet
Joseph M. Newcomer <newcomer@flounder.com> wrote in
news:9endp3pksl76i95jc8anil41getsjvq5r3@4ax.com:
It is not a reentrancy issue, it is a fundamental coding error. You
can't return a CString& to a local CString; it doesn't make sense!
You are returning a pointer to a location on the stack which no longer
exists!
I have no idea what you mean by "the formatting string is not good"
because "not good" is not a defined concept. In reading the code it
is clear what your bug is, but you need to be explicit about what is
wrong.
joe
On Tue, 22 Jan 2008 14:38:08 +0100, mosfet <john.doe@anonymous.org>
wrote:
Hi,
I am using a small singleton class called ResManager to handle my
resources in MFC .
One of its method is defined as shown below :
CString& ResManager::GetResText(int a_ResId)
{
BOOL bRet = m_strResText.LoadString( m_hResInst , a_ResId );
if (bRet == FALSE) {
WRITE2LN_LOG( "UIManager::GetResText : Cannot Load TEXT res
with id ",
a_ResId);
m_strResText.Empty();
}
return m_strResText;
}
The problem is when I call it like this :
CString strTmp;
strTmp.Format(_T("%s<BR><BR><a href=\"%s\">%s</a>"),
ResManager::Get()->GetResText(IDS_A),
ResManager::Get()->GetResText(IDS_B),
ResManager::Get()->GetResText(IDS_C));
the formatted string is not good.
How can I solve this ?
Joseph M. Newcomer [MVP]
email: newcomer@flounder.com
Web: http://www.flounder.com
MVP Tips: http://www.flounder.com/mvp_tips.htm