WEB开发网
开发学院软件开发VC 在MFC中集成RAD .NET框架 阅读

在MFC中集成RAD .NET框架

 2007-06-21 21:36:15 来源:WEB开发网   
核心提示: 在MFC非托管类中定义托管成员变量在MFC类中使用托管对象,提供对象的声明和初始化方法与传统的方法略有不同,在MFC中集成RAD .NET框架(3),以在文档类CtestDoc中添加一个托管成员变量为例,声明托管对象的代码如下:public: gcroot<test::testDoc

在MFC非托管类中定义托管成员变量

在MFC类中使用托管对象,提供对象的声明和初始化方法与传统的方法略有不同。以在文档类CtestDoc中添加一个托管成员变量为例,声明托管对象的代码如下:

public:
    gcroot<test::testDocObject*> m_ptestDocObj;

gcroot类型安全包装模板可以将托管参考类型指针作为成员变量嵌入到非托管类中,该变量就可以像其他类型的变量一样使用了。在CtestDoc的成员函数InitialDocument中创建这个对象,代码如下:

BOOL CtestDoc::InitialDocument()
{
  #pragma push_macro("new")
  #undef new
    m_ptestDocObj = new test::testDocObject();
  #pragma pop_macro("new")
}

由于testDocObject是一个托管参考类型,它总被分配在CLR堆上,所以自然不能使用在afx.h中定义的new操作符来直接初始化该对象以避免该托管对象在非托管的本地C++堆上创建导致的错误。在托管对象中声明MFC对象,与常规方法一致。

掌握了上述的基本托管类和对象在传统MFC项目中的对偶使用方法,就可以保证您充分使用.NET框架所提供的丰富的类库支持(引用相关的动态链接库并声明名称空间是必要的)。如果希望更多地了解托管和非托管C++代码混用的技术,可以参考TomArcher与NishantSivakumar合著,由Addison Wesley出版社出版的《Extending MFC Applications with the .NET Framework》一书,相信会很有帮助。

宿主.NET控件

宿主.NET控件的理论基础

在.NET Framework的世界里,功能丰富的.NET控件无疑是光彩夺目的明珠,MFC程序自然想联姻这些华丽的事物。由于MFC框架不提供对.NET控件的直接支持,从而导致MFC后天的失落(缺乏类似C#、VB.NET特有的可视化设计机制以及自由的控件组织功能),这一点多少成为MFC远离.NET世界的一种合理的客观原因。但是,我们注意到:.NET控件本质上就是ActiveX控件,二者之间的重要区别是注册方式不同——ActiveX控件是全局的,在系统注册表中注册;而.NET控件既可以在全局AssemblyCache中注册,也可以放在局部的目录中,相应的,在程序中获取它们相关信息的方式是不同的。但是,一旦.NET控件的基本信息被我们“捕获”,我们就可以使用与创建ActiveX控件一致的方法将.NET控件创建到MFC项目中。

上一页  1 2 3 4 5 6 7 8  下一页

Tags:MFC 集成 RAD

编辑录入:爽爽 [复制链接] [打 印]
赞助商链接