C++ がメインの開発言語だと、XML って好きになれないよなぁ、きっと

リフレクションのない言語で XML シリアライズって、汎用的でかつ使いやすいコード書くのはなかなか難しいですよねぇ。と、最近思う。

しばらく悩んでみた結果、いっそのこと C# を使って C++ソースコード生成する方が楽なんじゃないかという結論に至る。

で、作ったのが以下のプログラム。
http://ufcpp.net/study/csharp/source/GenXmlSerialize.zip

プロジェクト構成概要

  • GenXmlSerialize(C#
    • 型定義 XML ファイルから C++ クラスとシリアライズ用コードを自動生成するライブラリ。
  • TestGenXmlSerialize(C#
    • 名前通り、GenXmlSerialize のテスト用。
    • 型定義 XML ファイル中に Line とか Triangle とかの型を定義して、それから C++ コードを生成。
  • TestXmlSerialize(C++
    • TestGenXmlSerialize で生成した C++ コードをテストするコンソールアプリ。
    • gen フォルダ以下に、TestGenXmlSerialize で自動生成したファイルがあります。
    • 自動生成した関数は直接使用せず、XmlSerializeUtil.h / .cpp にあるラッパークラスを使います。
    • このコンソールアプリでは、Line, Triangle を保存→読込→表示をするだけ。
      • Debug フォルダの下に XML ファイルが保存されます。

ちなみに、XmlLite を使っています。Vista と XP SP3 には標準で入ってる DLL です。XP SP2 の場合、以下の更新プログラムが必要。
http://www.microsoft.com/downloads/details.aspx?FamilyID=d7b5dc81-ad14-4de2-8ad5-8c4a9aab5992&displaylang=ja

あと、CString とか CComPtr とか使いまくりなので、GUI 作るわけじゃないのに MFC をリンクしています。