CRunTimeClass 动态创建类

关于 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);
}




评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值