| 著作一覧 |
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の)が合わないと言われて失敗した……。
ジェズイットを見習え |