65.9K
CodeProject 正在变化。 阅读更多。
Home

简单的C++代码生成器(我的XML包装类示例用法)

starIconstarIcon
emptyStarIcon
starIcon
emptyStarIconemptyStarIcon

2.67/5 (9投票s)

2003年5月15日

3分钟阅读

viewsIcon

116624

downloadIcon

1556

使用XML和XSL生成C++类

Sample Image - result.jpg

引言

这是一个小的代码生成器。该程序的用户是一位程序员,他经常以类似的结构编写他的类。此程序也是关于如何使用我的文章 Windows SDK 的 DOM 接口的包装类 的代码的示例,文章的标题可能会在稍后更新,因为它的标题有些含糊不清。

如何使用 MS XML 解析器(IXMLDOMDocument)3.xxx 的包装类编译 VC6.0 用户的项目

如果您想在 VC 6 下成功编译 MS XML 3.x 包装类,您需要最新版本的 Microsoft Platform SDK,可以从 Microsoft 的网站下载。安装从 Microsoft 下载的 Platform SDK 后,您应该使用 [工具|选项…] 将 Platform SDK 的包含路径添加到 VC++ 的目录列表中。 Visual C++ 的 Service Pack 5 更好。

如何生成代码

VC++ 6.0 提供了一个串行类向导,可以帮助开发人员生成 MFC、ATL 等的架构代码。 Microsoft Visual Studio 也提供了一种编写新的类向导的标准方法。在这里,我们演示如何在 XML/XSL 中实现这样的功能。 实现此功能的原理非常简单。

theory

用户将在代码生成对话框中输入类名、头文件和源文件的文件名,该对话框是此项目的主窗口。如果您的新类的所有信息都已输入,您可以在对话框中按下生成按钮。该对话框将您的新类的所有信息收集到内存中的 XML 树中。然后,调用 CCodeGeneraterGenerate 方法,生成新类并将其保存到文件中,文件名由用户提供。

该程序的关键特性是使用 MS XML 3.x 或 4.0 中的 XML/XSL 功能。原理如图所示。参数可以由用户从 CGetItemDlg 给出。所有参数都打包到内存中的 XML 树中,例如 CXMLParameterResult。如您所知,XML 从磁盘文件加载或字符串存储在 IXMLDOMDocument 中,后者被包装在 CXMLFile 中。 用于生成新类的 CPP 和头文件的格式位于 2 个 XSL 文件中。 CcodeGenerater 将所有 XSL 文件加载到内存中,并调用 IXMLDOMDocumentTransformNode 方法来生成新类的源代码,源代码是由 TransformNode 返回的字符串。 然后,CCodeGenerater 根据用户指定的文件将结果写入文件。

UML diagram

UML 图是该程序的基本结构。在图中,我省略了 CWinApp 派生的文件和一些实用程序文件。

请注意,此工具生成的源代码是模板类 CGroupItems 的一个项类,CGroupItemsCArray 的一个特殊版本,具有在我的程序中大量使用的附加功能。CGroupItems 中的大多数函数都具有与函数相同的形式,以完成任务。

关于 XSL

XSL 是可扩展样式表语言,用于解释 XML 数据。有关 XSL 的更多详细信息,请参阅 MSDN 和 www.w3c.org

一起使用 XML 和 XSL,您可以发现大量有趣的用法。这个程序只是一个小小的演示。

致谢

感谢许多人对用英语撰写文章提出的建议。我不是以英语为母语的人,并且渴望分享我的想法。在我在 Code Project 上发布了几篇文章后,有些人发现我的表达不够清晰。我一直在尝试花更多时间来写好英语。

特别感谢 Anthony,他非常友善地渲染了我的文章,并阐述了我的文章中的语法和技术错误。 谢谢 .:)

© . All rights reserved.