CRuntimeClass
Marwan Abi-Antoun -- mea03@aub.edu.lb
Wednesday, April 02, 1997
Environment: Porting from VC++ 1.5x To VC++4.0, Win95
One message in the MFC-list archive explains how to create a CRuntimeClass
object by passing the name of the class as a string.
As a reminder, the macro RUNTIME_CLASS takes the name of the class not as a
string.
However, the provided code compiles only on VC++ 1.5x. After looking at the
source code of MFC, I was able to find the equivalent code in VC++ 4.0. It
seems to work...any better ideas ?
IMPLEMENT_DYNAMIC( CxObject, CObject )
//////////////////// VC++1.5x ////////////////////////////
CRuntimeClass *CxObject::FindRuntimeClass( const CString &className )
{
CRuntimeClass* pRuntimeClass = AfxGetCoreState( )->m_pFirstClass;
while ( pRuntimeClass )
{
if ( className == pRuntimeClass->m_lpszClassName )
return pRuntimeClass;
pRuntimeClass = pRuntimeClass->m_pNextClass;
}
return NULL;
}
//////////////////// END OF VC++1.5x////////////////////////////
///////////////////////// VC++ 4.0 ////////////////////////////
CRuntimeClass *CxObject::FindRuntimeClass( const CString &className )
{
CRuntimeClass * pRTC = NULL;
// just walk through the simple list of registered classes
AFX_MODULE_STATE * pCoreState = AfxGetModuleState();
for (CRuntimeClass * pRuntimeClass = pCoreState->m_classList.GetHead();
pRuntimeClass != NULL;
pRuntimeClass = pCoreState->m_classList.GetNext(pRuntimeClass))
{
// class name must match
if ( strcmp(pRuntimeClass->m_lpszClassName, className) == 0 )
{
pRTC = pRuntimeClass;
break;
}
}
return pRTC;
}
///////////////////////// END OF VC++ 4.0 ////////////////////////////
Olivier PLANCHON -- Olivier.Planchon@orstom.sn
Thursday, April 03, 1997
It's rare to _really_ need to get a runtime class from a string :
if you know the name in advance, use the macro RUNTIME_CLASS( CMyObject )
if you do not know it in advance use :
CRuntimeClass* runtime_class = curent_object_in_a_while_loop->GetRuntimeClass()
then access to the string if necessary with runtime_class->m_lpszClassName
hope this help.
At 11:13 02/04/97 +0300, you wrote:
>Environment: Porting from VC++ 1.5x To VC++4.0, Win95
>
>One message in the MFC-list archive explains how to create a CRuntimeClass
>object by passing the name of the class as a string.
>As a reminder, the macro RUNTIME_CLASS takes the name of the class not as a
>string.
>
>However, the provided code compiles only on VC++ 1.5x. After looking at the
>source code of MFC, I was able to find the equivalent code in VC++ 4.0. It
>seems to work...any better ideas ?
>
>
>IMPLEMENT_DYNAMIC( CxObject, CObject )
>
>//////////////////// VC++1.5x ////////////////////////////
>
>CRuntimeClass *CxObject::FindRuntimeClass( const CString &className )
>{
>
> CRuntimeClass* pRuntimeClass = AfxGetCoreState( )->m_pFirstClass;
> while ( pRuntimeClass )
> {
> if ( className == pRuntimeClass->m_lpszClassName )
> return pRuntimeClass;
> pRuntimeClass = pRuntimeClass->m_pNextClass;
> }
>
>
> return NULL;
>}
>//////////////////// END OF VC++1.5x////////////////////////////
>
>///////////////////////// VC++ 4.0 ////////////////////////////
>
>CRuntimeClass *CxObject::FindRuntimeClass( const CString &className )
>{
> CRuntimeClass * pRTC = NULL;
> // just walk through the simple list of registered classes
> AFX_MODULE_STATE * pCoreState = AfxGetModuleState();
> for (CRuntimeClass * pRuntimeClass = pCoreState->m_classList.GetHead();
> pRuntimeClass != NULL;
> pRuntimeClass = pCoreState->m_classList.GetNext(pRuntimeClass))
> {
> // class name must match
> if ( strcmp(pRuntimeClass->m_lpszClassName, className) == 0 )
> {
> pRTC = pRuntimeClass;
> break;
> }
> }
> return pRTC;
>}
>
>///////////////////////// END OF VC++ 4.0 ////////////////////////////
>
>
>
---------------------------------------
Olivier PLANCHON, ORSTOM, BP 1386 Dakar
tel(221) 32 34 80 fax (221) 32 43 07
e-mail Olivier.Planchon@orstom.sn
Become an MFC-L member
| Вернуться в корень Архива
|