CString Extensions for Resource Loading and String Formatting
Posted
by Joshua Reed
on May 12th, 2000
Class Definitions
// Load resource
class CResString : public CString
{
public:
CResString(): CString() {};
CResString(UINT nResID)
{
Init();
VERIFY(LoadString(nResID) != 0);
_ASSERTE( m_pchData );
};
void operator () (UINT nResID)
{
Init();
VERIFY(LoadString(nResID) != 0);
_ASSERTE( m_pchData );
}
};
// Format
class CFmtString : public CString
{
public:
CFmtString(): CString() {};
CFmtString( char *szFormat, ... )
{
Init();
va_list argList;
va_start( argList, szFormat );
FormatV( szFormat, argList );
};
CFmtString( UINT uResID, ... )
{
Init();
va_list argList;
CResString sFormat( uResID );
va_start( argList, sFormat );
FormatV( sFormat, argList );
};
void operator () ( char *szFormat, ... )
{
Init();
va_list argList;
va_start( argList, szFormat );
FormatV( szFormat, argList );
}
void operator () ( UINT uResID, ... )
{
Init();
va_list argList;
CResString sFormat( uResID );
va_start( argList, sFormat );
FormatV( sFormat, argList );
}
};
Examples of Using the CResString Class
CResString sSection(IDS_DATAOBJECTSECTION); // Use sSection // ... // Load another string sSection(IDS_INVALIDOBJECT);
Example of Using the CFmtString Class
CFmtString sCommand(_T("SELECT %s FROM %s WHERE %s = %d"),
sColumn1, sTable, sColumn2, nID );
// Use sQuery
// ...
// Format another
sCommand(_T("UPDATE %s SET %s = %d WHERE %s = %d"),
sTable, sColumn1, nValue, sColumn2, nID );

Comments
Update for .NET?
Posted by Legacy on 01/10/2003 12:00amOriginally posted by: HJG
Seems that the Init() and Release() methods aren't available in Visual Studio .NET, and the protected data member m_pchData isn't avaiable either.
Anyone have a modified version of CResString for .NET?
Thanks.
ReplyRelease your leak
Posted by Legacy on 10/16/2001 12:00amOriginally posted by: Josh Reed
Calling Release() prior to reuse will cure your leak.
How appropriate.
I had thought that Init() would've handled this, but
apparently not.
Have another pint on me.
void operator () (UINT nResID)
{
Release();
Init();
VERIFY(LoadString(nResID) != 0);
_ASSERTE( m_pchData );
}
void operator () ( char *szFormat, ... )
{
Release();
Init();
va_list argList;
va_start( argList, szFormat );
FormatV( szFormat, argList );
}
void operator () ( UINT uResID, ... )
{
Release();
Init();
va_list argList;
CResString sFormat( uResID );
va_start( argList, 0 );
FormatV( sFormat, argList );
}
ReplyGreat but i'm leaking like a man with ten pints of beer in his belly
Posted by Legacy on 08/29/2001 12:00amOriginally posted by: Tim Stubbs
ReplyGreat class, just one thing
Posted by Legacy on 05/03/2001 12:00amOriginally posted by: Ron van Gelderen
This class is a great help for dealing with strings.
There's one bug in the code that causes trouble in the CFmtString class:
CFmtString( UINT uResID, ... )
{
Init();
va_list argList;
CResString sFormat( uResID );
// va_start( argList, sFormat ); // this line should be replaced...
va_start( argList, uResID); // with this line!
FormatV( sFormat, argList );
};
void operator () ( UINT uResID, ... )
{
Init();
va_list argList;
CResString sFormat( uResID );
// va_start( argList, sFormat ); // this line should be replaced...
va_start( argList, uResID); // with this line!
FormatV( sFormat, argList );
}
-Ron
Reply