CRunTimeClass 动态创建类

原创 专栏收录该内容
62 篇文章 0 订阅

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




  • 0
    点赞
  • 0
    评论
  • 0
    收藏
  • 打赏
    打赏
  • 扫一扫,分享海报

©️2021 CSDN 皮肤主题: 大白 设计师:CSDN官方博客 返回首页

打赏作者

sail0323

你的鼓励将是我创作的最大动力

¥2 ¥4 ¥6 ¥10 ¥20
输入1-500的整数
余额支付 (余额:-- )
扫码支付
扫码支付:¥2
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值