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






2.67/5 (9投票s)
2003年5月15日
3分钟阅读

116624

1556
使用XML和XSL生成C++类
引言
这是一个小的代码生成器。该程序的用户是一位程序员,他经常以类似的结构编写他的类。此程序也是关于如何使用我的文章 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 中实现这样的功能。 实现此功能的原理非常简单。
用户将在代码生成对话框中输入类名、头文件和源文件的文件名,该对话框是此项目的主窗口。如果您的新类的所有信息都已输入,您可以在对话框中按下生成按钮。该对话框将您的新类的所有信息收集到内存中的 XML 树中。然后,调用 CCodeGenerater
的 Generate
方法,生成新类并将其保存到文件中,文件名由用户提供。
该程序的关键特性是使用 MS XML 3.x 或 4.0 中的 XML/XSL 功能。原理如图所示。参数可以由用户从 CGetItemDlg
给出。所有参数都打包到内存中的 XML 树中,例如 CXMLParameterResult
。如您所知,XML 从磁盘文件加载或字符串存储在 IXMLDOMDocument
中,后者被包装在 CXMLFile
中。 用于生成新类的 CPP 和头文件的格式位于 2 个 XSL 文件中。 CcodeGenerater
将所有 XSL 文件加载到内存中,并调用 IXMLDOMDocument
的 TransformNode
方法来生成新类的源代码,源代码是由 TransformNode
返回的字符串。 然后,CCodeGenerater
根据用户指定的文件将结果写入文件。
UML 图是该程序的基本结构。在图中,我省略了 CWinApp
派生的文件和一些实用程序文件。
请注意,此工具生成的源代码是模板类 CGroupItems
的一个项类,CGroupItems
是 CArray
的一个特殊版本,具有在我的程序中大量使用的附加功能。CGroupItems
中的大多数函数都具有与函数相同的形式,以完成任务。
关于 XSL
XSL 是可扩展样式表语言,用于解释 XML 数据。有关 XSL 的更多详细信息,请参阅 MSDN 和 www.w3c.org。
一起使用 XML 和 XSL,您可以发现大量有趣的用法。这个程序只是一个小小的演示。
致谢
感谢许多人对用英语撰写文章提出的建议。我不是以英语为母语的人,并且渴望分享我的想法。在我在 Code Project 上发布了几篇文章后,有些人发现我的表达不够清晰。我一直在尝试花更多时间来写好英语。
特别感谢 Anthony,他非常友善地渲染了我的文章,并阐述了我的文章中的语法和技术错误。 谢谢 .:)