C#からPowerPointを操作していてつまづいたことメモ
C#からCOMオブジェクト経由でPowerPointを操作していて困ったところを簡単にメモしておきます。
XML形式の設定ファイルを利用する
背景
プログラムの入力ファイル(設定ファイルなど)をXML形式にしたいとする。
XMLの形式を作成する
入力ファイル(設定ファイル)が非常に簡単な形式なら、今回のような工夫は必要ありません。しかし、本当に簡単な形式であったとすれば、そもそもXML形式である必要すらありません。そこで、今回は、とある項目があったりなかったり、大規模であったり、論理的な制約があるなど、XMLにするだけ複雑だとします。
そんなとき、まずはその複雑なXMLファイルの定義を作成する必要があります。今回は、その定義をXML Schemaという形式で作成します。作成したファイルの拡張子は.xsdです。.xsdファイルの書き方についてはいつか記事に出来ればと思っています。かなりとっかかりがつかみにくいので
XML Schema(.xsd)ファイルからC#のクラスファイルを作成する
.xsdファイルから.csファイルを作成します。この作成には、Visual Studioに含まれるXMLスキーマ定義ツール(xsd.exe)を利用します。Visual Studio 2008で確認すると、xsd.exeは「C:\Program Files\Microsoft SDKs\Windows\v6.0A\bin\xsd.exe」にあります。
そして、XMLSchema.xsdは、次のようにしてC#のクラスファイルに変換可能です。
>xsd.exe /l:cs /c XMLSchema.xsd
XMLSchema.xsdで定義されたXML Schemaに従って作成されたファイルは、生成されたC#のクラスにデシリアライズ可能です。しかし、XML Schemaを完全に反映したクラスファイルになっていない点に注意してください。たとえば、maxOccursなどは反映されないので、生成されたクラスを必ずしもXML Schemaに従ったXMLファイルにシリアライズ可能というわけではないみたいです。
また、生成するクラスの名前空間を指定したい場合は、指定したい名前空間が「MyNameSpace」のときは、次のようにすればOKです。
>xsd.exe /l:cs /c XMLSchema.xsd /n:MyNameSpace
シリアライズ・デシリアライズ
ここまで来れば、あとはシリアライズだろうがデシリアライズだろうが自由にやってあげてください。これについては、以下のmsdnが参考になります。
Microsoft Chart Controlsの導入方法メモ
Microsoft Chart Controlsとは
Microsoft Chart Controlsとは、Microsoft謹製の非常に見た目に優れたChart Controlです。Chartというのは、ここでは日本語で言うところのグラフ、つまり、棒グラフや円グラフなどです。
Microsoft Chart Controlsでは、とても綺麗なグラフを簡単に.NETアプリケーション上に作成することが出来ます。
Control.BeginInvokeとControl.Invoke(System.Windows.Forms)メモ
GUIアプリを.NETで作成するとき、GUIを操作するのは常にメインスレッドであって、サブスレッドから操作してはいけないというのが鉄則なんですが、そのときに便利なBeginInvokeとInvoke。ちょっとmsdnライブラリで見てみたら、
BeginInvoke
コントロールの基になるハンドルが作成されたスレッド上で、指定したデリゲートを非同期的に実行します。Invoke
コントロールの基になるウィンドウ ハンドルを所有するスレッド上で、デリゲートを実行します。
と、なっていました。msdnを見てちょっとスッキリ。
ちなみに、「作成」と「所有」になにか違いはあるのだろうかと思って、英語(en-us)で見てみると、
BeginInvoke
Executes a delegate asynchronously on the thread that the control's underlying handle was created on.Invoke
Executes a delegate on the thread that owns the control's underlying window handle.
となっていて、やっぱりちょっと違います。とりあえず、同期と非同期の違いだと思っておけばいいんですかね。
それにしても、GUIをきれいに構成する方法が知りたい。複雑になると拡張性を無視したコードになっちゃう。うーん、まぁ、やってるうちに少しずつよくなればいいのかな。
Microsoft公式「.NET Framework 開発ガイド」がWebで登場
「.NET Framework 開発ガイド」が、Microsoftから公開されました。内容は、.NET Framework
「.NET Framework の仕組みを紹介した ".NET Framework 開発ガイド ブック" が Web で登場」
.NET Framework 開発ガイド ブックは .NET Framework の動作の仕組みを分かりやすく説明したコンテンツです。.NET Framework の心臓部である CLR (Common Language Runtime) を中心に、.NET Framework をしっかり理解するための情報が満載です。.NET Framework をより深く学びたい開発者にも、.NET Framework を初めて学ぶ人にもピッタリなコンテンツです。ぜひ、.NET Framework スペシャリストへの第一歩としてご活用ください。
というわけで、読んでみました。→「Microsoft .NET Framework 開発ガイドブック」
Microsoft .NET Framework 開発ガイドブック
.NET Frameworkの仕組みや、構成、概要がよく分かります。目次は以下のようになっています。
全体としては短いですが、ボリュームはたっぷりで、これを読むだけで、.NET Frameworkの知識が一気に手に入ります。図も多く、読みやすいです。
どの章も興味深いのですが、気になったところを抜粋して紹介します。
ildasm.exe
ILDASMは、MSIL Disassemblerの略であり、MSILとは、Microsoft Intermediate Languageのことです。つまり、ILDASM.exeは、MSIL(.NETでの中間言語)で記述されたファイル(.exe、.dll)の内容を読み取ることができるツールと言えます。
実際に、ildasm.exeを利用してみます。ildasm.exeの場所は、少し探すのが大変ですが、次のようなパスにありました。
C:\Program Files\Microsoft SDKs\Windows\v6.0A\bin\ildasm.exe
ダブルクリックで簡単に実行可能です。
ダブルクリックで実行すると、ウィンドウが表示されるので、「ファイル」から、EXEファイルや、DLLファイル(もちろん、.NET Frameworkを利用したもの)を読み込んでみます。すると、ツリー構造が表示されます。
MANIFESTをダブルクリックするとDLLもしくはEXEに埋め込まれたマニフェスト(ファイルに関する情報)を表示することができます。
また、「表示(V)>メタ情報(M)>表示!(S)」をクリックすることで、ファイルのメタ情報(どのような型が宣言されているかなど)が表示されます。表示する必要があるかは別として、ファイルにどのような情報が格納されているかが見られるというのは勉強になります。
はじめにファイルを開いたときに表示されたツリーをたどっていくことでもどのようなメソッドやクラスが定義されていて使用可能であるかが分かります。
ほかにもたくさんの機能がありますが、とくにおもしろいものとしては、「表示(V)>統計値(I)」から見られる統計情報です。ファイル自体の何パーセントがどのような要素から校正されていて、いくつのメソッドが宣言されているか、そのサイズはどれくらいかなどの詳細な情報をチェックできます。これまた、実用的な意味があるかは別にしても、とても興味深いです。