Click here to Skip to main content
65,938 articles
CodeProject is changing. Read more.
Articles
(untagged)

A simple C++ code generator (Sample Usage of my XML Wrapper class)

0.00/5 (No votes)
14 May 2003 1  
Generate C++ classes using XML & XSL

Sample Image - result.jpg

Introduction

This is a small code generator. The user of this program is a programmer who writes his class in a similar structure time after time. This program is also an example for how to use the code of my article Wrapper class for DOM interface of windows SDK the title of which may be updated later, for its an ambiguous title.

How to compile the project using my wrapper of MS XML parser (IXMLDOMDocument )3.xxx for VC6.0 user

If you want to compile the classes for MS XML 3.x wrapper classes successfully under VC 6, you need the latest version of Microsoft Platform SDK, which can be downloaded from Microsoft�s website. After installing the Platform SDK downloaded from Microsoft, you shall use [tools|options�] to add your include path of Platform SDK in the directory list of VC++. Service pack 5 for Visual C++ is better.

How to generate code

VC++ 6.0 provides a serial class wizard which helps developers to generate the architecture code of MFC, ATL and so on. Microsoft Visual Studio also provides a standard way to write a new class wizard. Here, we demonstrate to implement such a function in XML/XSL. The principle to implement this function is very simple.

theory

The user will input class name, the file name for header and source in the code generation dialog which is the main window of this project. If all information for your new class is inputted, you can push generate button in the dialog. The dialog collects all information of your new class into an XML tree in the memory. And then, calls the method Generate of CCodeGenerater, the new class is generated and saved to files with file names as given by the user.

The key feature of this program is the using of XML/XSL features in MS XML 3.x or 4.0. The principle is in the figure .The parameters can be given from CGetItemDlg by user. All parameters are packed into an XML tree in memory say CXMLParameterResult. As you know, the XML is loaded from disk file or string is stored in IXMLDOMDocument which is wrapped in CXMLFile. The format of CPP and header files used to generate new classes is located in 2 XSL files. CcodeGenerater loads all XSL files into memory and calls TransformNode method of IXMLDOMDocument to generate new class� source code which is a string returned by TransformNode. And then, the CCodeGenerater writes the result to files according to user specific files.

UML diagram

The UML figure is the basic structure for this program. In the diagram, I omitted the CWinApp derived files and some utility files.

Note that the source code generated by this tool is an item class for template class CGroupItems, which is a special version of CArray with additional features that are used heavily in my program. Most functions in CGroupItems has the same form of functions in order to accomplish task.

About XSL

XSL is Extensible Stylesheet Language to interpret XML data. More detail information of XSL can be found in MSDN and www.w3c.org.

Using XML and XSL together, you can find enormous interesting usages. This program is just a small demonstration.

Acknowledgements

Thanks for a lot of people who have given me suggestions on writing articles in English. I�m not a native speaker and am eager to share my ideas. After I posted several articles to Code Project, some people figured out that my expression was not clear. I have tried to take more time to write good English.

Special thanks to Anthony, he is very kind to render my article, and articulate grammar and technical errors in my article. Thanks .:)

License

This article has no explicit license attached to it but may contain usage terms in the article text or the download files themselves. If in doubt please contact the author via the discussion board below.

A list of licenses authors might use can be found here