给你一段代码看看~!
CString str = "Analyse";
CRuntimeClass* pClass = GetRTClass( str );
if( ! pClass ) return NULL; // 无效类名
Analyse* pOb = (Analyse*)pClass->CreateObject();
if( ! pOb )
return NULL; // 创建对象失败
else {
AfxMessageBox( "create object success ! " );
delete pOb;
}
CString str = "Analyse";
CRuntimeClass* pClass = GetRTClass( str );
if( ! pClass ) return NULL; // 无效类名
Analyse* pOb = (Analyse*)pClass->CreateObject();
if( ! pOb )
return NULL; // 创建对象失败
else {
AfxMessageBox( "create object success ! " );
delete pOb;
}
它的功能和我想的一样,是获得一个合适的CRuntimeClass,但这是你自己写的吗
CRunTimeClass * pClass,* pClass1;
CObject * pOb;
AFX_MODULE_STATE* pModuleState = AfxGetModuleState();
for (pClass = pModuleState->m_classList; pClass != NULL;
pClass = pClass->m_pNextClass)
{
if (lstrcmpA(szClassName, pClass->m_lpszClassName) == 0)
{
try{
pOb=pClass->CreateObject();
}
}
}
CObject* CreateObject(const CString& strClassName)
{
ASSERT(!strClassName.IsEmpty());
CRuntimeClass* prc = RUNTIME_CLASS(strClassName); // 检查运行时刻类的有效性 ...
ASSERT(prc != NULL);
ASSERT(prc->IsDerivedFrom(RUNTIME_CLASS(CObject)); // 这里不要把创建错误直接反馈给用户, 这个函数应该只对调用者负责...
return (CObject*)prc->CreateObject();
}
我今天仔细看了这几个宏,发现了一个afxinitclass()函数,就是用于连接CRuntimeClass到m_classList,但是只在IMPLEMENT_SERIAL宏的底下用到了,用法和上面各位说的差不。
我的问题是,难道IMPLEMENT_DYNAMIC,IMPLEMENT_DYNCREATE就不用把其CRuntimeClass结构连接到m_classList中吗,那么 jyf7862(jyf) 给出的代码可以用吗?