我要做一个基类(比如视频控件),定义好虚方法,在显示画面(窗体中)动态的创建此控件,使用相同的方法比如:Init(),Start(),Stop()。
此基类作为开发包提供给别人,别人如果使用的厂家不同,要写新的视频子类(控件),只能够从我的基类继承,具体在窗体中引用不能改写了,都是我定义好的。
在此我就有点疑惑,如果我的程序中不引用别人的子类,能够根据他们的子类名称来动态创建对象吗?
---------------------
请大家提供思路,提供这样的基类行吗?如何实现?用CRuntimeClass吗?
VC很不熟悉,谢谢大家!
此基类作为开发包提供给别人,别人如果使用的厂家不同,要写新的视频子类(控件),只能够从我的基类继承,具体在窗体中引用不能改写了,都是我定义好的。
在此我就有点疑惑,如果我的程序中不引用别人的子类,能够根据他们的子类名称来动态创建对象吗?
---------------------
请大家提供思路,提供这样的基类行吗?如何实现?用CRuntimeClass吗?
VC很不熟悉,谢谢大家!
我的想法是我提供界面开发平台,别人继承我的基类,实现,我只负责调用控件。不知道能否行得通,做个简单的DEMO测试下了。
http://topic.csdn.net/u/20091117/19/7faa3bfe-cee9-43cb-b6ae-0a55559b6730.html提供两个链接,先看看。
class __declsdec(dllexport) CVedioCtrl abstract : public CWnd
{
public:
// constructor & destructor
CVedioCtrl();
virtual ~CVedioCtrl(); // Implementation
virtual void Initialize() = 0; // initialize the control status.
virtual BOOL Start() = 0; // start to do vedio, or other things.
virtual void Stop() = 0; // stop to do vedio.
};类的接口声明这样写已经差不多了,在其中包装更多需要的方法即可。至于动态创建,是一个实例化的过程,这个过程,无论是程序员,还是最终用户,它知道他想要的是什么,他自然会选定对应的对象,也就是说,这里他会告诉你,这个被实例化的类是什么类。这应该是一个管理框架类。
可以是这样,写一个Manager管理类,里面有一个方法,例如virtual CVedioCtrl* GetInstance();这个方法可以被重写,默认情况下,有一个实现,在DLL内部,这个方法返回一个默认的对CVedioCtrl接口对象的实现,return net CXXXXX();
这个Manager里,应该有一个清理方法,亦可以被重写,例如virtual void DisposeData(); 默认行为是清理这个CVedioCtrl*的对象,delete XXX;
如果你想要使用运行时,CRuntimeClass,MFC里有对应的宏,DECLARE_DYNCREATE(ThisClassName)和IMPLEMENT_DYNCREATE(ThisClassName, BaseClassName),那么,你还需要在这个管理类里添加一样东西,那就是保存即将被创建的对象的运行时信息,因此,你需要提供一个方法,供给用户去设置这些信息。如果不使用运行时,那么这个创建的过程,完全可以由用户完成,在使用的时候,直接使用其它指针即可。
这样可以实现吗?
----------------
感觉有点绕