トップ «前の日記(2009-11-18) 最新 次の日記(2009-11-20)» 編集

日々の破片

Subscribe with livedoor Reader
著作一覧

2009-11-19

_ Silverlight4は新たなHTAプラットフォーム

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の)が合わないと言われて失敗した……。


2003|06|07|08|09|10|11|12|
2004|01|02|03|04|05|06|07|08|09|10|11|12|
2005|01|02|03|04|05|06|07|08|09|10|11|12|
2006|01|02|03|04|05|06|07|08|09|10|11|12|
2007|01|02|03|04|05|06|07|08|09|10|11|12|
2008|01|02|03|04|05|06|07|08|09|10|11|12|
2009|01|02|03|04|05|06|07|08|09|10|11|12|
2010|01|02|03|04|05|06|07|08|09|10|11|12|
2011|01|02|03|04|05|06|07|08|09|10|11|12|
2012|01|02|03|04|05|06|07|08|09|10|11|12|
2013|01|02|03|04|05|06|07|08|09|10|11|12|
2014|01|02|03|04|05|06|07|08|09|10|11|12|
2015|01|02|03|04|05|06|07|08|09|10|11|12|
2016|01|02|03|04|05|06|07|08|09|10|11|12|
2017|01|02|03|04|05|06|07|08|09|10|11|12|
2018|01|02|03|04|05|06|07|08|09|10|11|12|
2019|01|02|03|04|05|06|07|08|09|10|11|

ジェズイットを見習え