关于 CRuntimeClass 的说明就不多说了,网上一大堆,直接上示例。
//IAddress.h
#pragma once
class IAddress : public CObject
{
public:
virtual CString GetAddress() = 0;
};
//Address.h
#pragma once
#include "IAddress.h"
class CAddress : public IAddress
{
DECLARE_SERIAL(CAddress)
public:
CString GetAddress();
};
//Address.cpp
#include "StdAfx.h"
#include "Address.h"
IMPLEMENT_SERIAL(CAddress,IAddress,0)
CString CAddress::GetAddress()
{
CString strAddress(_T("Shenzhen, China"));
return strAddress;
}
// DynamicClassDlg.cpp : 实现文件
//
#include "stdafx.h"
#include "DynamicClass.h"
#include "DynamicClassDlg.h"
#include "Address.h"
//...建了一个对话框,类名为 CDynamicClassDlg,添加了 Create 按钮来动态创建类
void CDynamicClassDlg::OnBnClickedCreate()
{
// TODO: 在此添加控件通知处理程序代码
CString strClsName(_T("CAddress"));
IAddress *pAddress = NULL;
CRuntimeClass *pRTCls = CRuntimeClass::FromName(strClsName);
if(pRTCls == NULL)
{
return;
}
CObject *pObject = pRTCls->CreateObject();
pAddress = dynamic_cast<IAddress*>(pObject);
if(pAddress == NULL)
{
return;
}
CString strAddress = pAddress->GetAddress();
MessageBox(strAddress, _T("Dynamic class"), MB_OK);
}