著作一覧 |
HTA(Html Application)は、IEをベースにした簡単なCOMオートメーションプラットフォームで、JScriptからASR(というよりもASRのモティベーションとなっているわけだが)までホスト可能なActiveScriptとHTMLの組み合わせでGUIスクリプトが書ける。
それは良いのだが、GUIプラットフォームがHTMLというのは楽だけど制限も多い。
で、12年くらいたって、Silverlight4のブラウザー外実行がそれに続くようになった(HTAと同じでどこまで利用されるかは別だけど)。
以下、Silverlight 4 Rough Notes: Trusted Applicationsからの引用。
dynamic excel = ComAutomationFactory.CreateObject("Excel.Application"); excel.Workbooks.Add(); for (int i = 1; i <= 10; i++) { excel.ActiveSheet.Cells[i, 1].Value2 = i; excel.ActiveSheet.Cells[i, 2].Value2 = i * i; } excel.ActiveSheet.ChartObjects(). Add(100, 100, 300, 300).Chart.ChartWizard( excel.ActiveSheet.Range("A1", "B10")); string path = string.Format("{0}??picture.jpg", Environment.GetFolderPath(Environment.SpecialFolder.MyPictures)); excel.ActiveSheet.ChartObjects(1).Chart.Export(path, "JPG"); excel.ActiveWorkbook.Close(SaveChanges: false); excel.Quit(); using (FileStream stream = File.OpenRead(path)) { BitmapImage bitmapImage = new BitmapImage(); bitmapImage.SetSource(stream); imageExcel.Source = bitmapImage; stream.Close(); }
dynamicキーワードがIDispatchと結びつくというのは都合が良い展開。C#いいねぇ。
で、ComAutomationFactoryがキーとなるのだが、これはSystem.Windows.Interopに含まれているようだ。たぶん、dynamicな変数のメソッド呼び出しは都度リフレクションを利用してMethodInfoを読むはずだから、そのタイミングでIDispatch#GetIDsOfNamesを呼んでDISPIDをラップしたMethodInfoを返すというような実装だろう。……と考えてみると、ComAutomationFactoryを待たずに実装可能な話だったのだな。
SDKを入れようとしたら言語(VS2010の)が合わないと言われて失敗した……。
ジェズイットを見習え |