2007-09-10 出遅れ気味〜
■[python][.NET] IronPython 2.0 Alpha4 で追加された"-X:PreferComDispatch"オプションって、何の役に立つの? 
IronPython 2.0 Alpha4が出ました。
早速、OPC Dialyさんの所で簡単に訳してもらっています。(英語ダメぽな私にとって、とっても有難いっす)
で、ここで言及されている、"-X:PreferComDispatch"オプションなんですが、説明では、以下のように解説されています。
-X:PreferComDispatch起動オプション。IDispatchインターフェイスをもつCOMコンポーネントを直接操作可能にするオプション。つまり、ラッパアセンブリの事前作成がいらない。
百聞は一見に如かず。まずは、試してみましょう。

IronPython1 posted by (C)wacky
…判ります?
以前、私が書いたネタでは、以下のように作業して、初めてActiveXが使えていました。
しかし、"-X:PreferComDispatch"オプションを使うと、以下のように直接Excelを制御する事ができます。
import clr from System import Type, Activator t = Type.GetTypeFromProgID("Excel.Application") ex = Activator.CreateInstance(t) ex.Visible = True wd = ex.Workbooks.Add() ws = wd.Sheets[1] for y in range(1, 10): ws.Cells[y, 1].Value = y

IronPython2 posted by (C)wacky
ちなみに、IDispatchインタフェースのダイレクトサポートしていると言うだけあって、オブジェクトに対して dir する事ができます。
(きっと内部で、IDispatch::GetIDsOfNamesメソッド or IDispatch::GetTypeInfoメソッド を呼び出しまくりんぐでしょう)
>>> import clr
>>> from System import Type, Activator
>>> t = Type.GetTypeFromProgID("Excel.Application")
>>> ex = Activator.CreateInstance(t)
>>> dir(ex)
['ActivateMicrosoftApp', 'ActiveCell', 'ActiveChart', 'ActivePrinter', 'ActiveSh
eet', 'ActiveWindow', 'ActiveWorkbook', 'AddChartAutoFormat', 'AddCustomList', '
<略>
ection', 'SendKeys', 'SetDefaultChart', 'Sheets', 'SheetsInNewWorkbook', 'ShowCh
artTipNames', 'ShowChartTipValues', 'ShowToolTips', 'ShowWindowsInTaskbar', 'Sta
ndardFont', 'StandardFontSize', 'StartupPath', 'StatusBar', 'TemplatesPath', 'Th
isWorkbook', 'ToString', 'Top', 'TransitionMenuKey', 'TransitionMenuKeyAction',
'TransitionNavigKeys', 'Undo', 'Union', 'UsableHeight', 'UsableWidth', 'UserCont
rol', 'UserLibraryPath', 'UserName', 'VBE', 'Value', 'Version', 'Visible', 'Vola
tile', 'Wait', 'Width', 'WindowState', 'Windows', 'WindowsForPens', 'Workbooks',
'WorksheetFunction', 'Worksheets', '_Default', '_Evaluate', '_Run2', '__class__
', '__delattr__', '__doc__', '__getattr__', '__getattribute__', '__getitem__', '
__hash__', '__init__', '__module__', '__new__', '__nonzero__', '__reduce__', '__
reduce_ex__', '__repr__', '__setattr__', '__str__']
"-X:TabCompletion"オプションと合わせて使うと、補完機能が働いて、まさしくウマーな状態です。
要するに
- "
-X:PreferComDispatch"を使うと、tlbimpを使わなくてOK - "
-X:TabCompletion"と合わせて、一挙両得
という事です。はい。
RubyでもOLEを使えた時は、非常に感動しましたが、これはオペレーション
しながら且つ、DLRの魅力を説明できてウマーっすね。
PowerShellでは出来ていたことなので、何時かやるんだろうなと思っていたら、入れてきましたね。
PowerShellを使いたくないシス管の人には朗報でしょう。
Seasons さん
> なんかこれだけでもデモやっている感じがしておもしろいですね。
感想ありがとうございます。
実は最初、IDispatchを直接サポートって何じゃらほい?と思ってたんですが、サンプルソースとコマンドラインでポチポチ動きを追っかけている最中に、昔勉強した IDispatchのメソッドが頭に浮かんできて、「なるほど〜、そうやってるのか」と意味もなく膝ポンしてました。
ishisaka さん
> PowerShellでは出来ていたことなので...
翻訳ありがとうございます。
(そちらは、水びたしの件で、結構大変ですね…(オロオロ))
PowerShellでは出来てたんですね。う〜ん、手を出してなかったので、気付きませんでした。
今度、インストールしてみようかな…。