Welcome to MSDN Blogs Sign in | Join | Help
IronPython 2.0 における OLE Automationサポート

IronPython 2.0ベータには、COMのOLE AutomationをサポートするためのIDispatchサポートが含まれています。このサポートを有効化するのが、-X:PreferComDispatchスイッチなのですが、ShriさんのBlogによると何やら面白そうな機能を追加させるようです。ベータ1には含まれていないので、Change Set 32648で試してみました。Change Set 32648をダウンロードしてビルドして作成したipy.exeで試したのが以下のコードです。

C:\Python\2.0\32648\IronPython_Main\Bin\Debug>ipy -X:PreferComDispatch
IronPython 2.0 Beta (2.0.0.1000) on .NET 2.0.50727.1434
Copyright (c) Microsoft Corporation. All rights reserved.
>>> import clr
>>> import System
>>> wordTLB = System.Guid("00020905-0000-0000-C000-000000000046")
>>> clr.AddReferenceToTypeLibrary(wordTLB)
>>> dir()
['System', '__builtins__', '__doc__', '__name__', 'clr', 'wordTLB']
>>> from Word import Application
>>> dir()
['Application', 'System', '__builtins__', '__doc__', '__name__', 'clr', 'wordTLB
']
>>> word = Application()
>>> word.Visible = True
>>> doc = word.Documents.Add()
>>> doc.Range().Text = "Hello from IronPython"
>>> word.Quit()

clrモジュールにAddReferenceToTypeLibraryメソッドが追加されていて、COMオブジェクトのGuidを渡します。そうするとAutomationオブジェクトをインポートできるようになります(from Word import Application)。後はインスタンスを作成して、操作をするだけという手軽さです。このコードで関心したのは、最後のQuitメソッドを呼んだ後のWordオブジェクトの扱いです。タスクマネージャで確認したら、winword.exeのプロセスも終了していました。つまり、Automationオブジェクトのプロセスのクリーンアップをちゃんとしてくれているということです。
#個人的には、何気にクリーンアップをちゃんとするので良いなぁと思ったりしています。

最後にChange Set 32648のソースコードを見ていて気がついたのですが、DLR関連のプロジェクトが、Microsoft.ScriptingとMicrosoft.Scripting.Coreの2つになっていました。ネームスペースは変更されていないのですが、内部構造の変更が行われているようです。

Posted: Wednesday, April 16, 2008 11:52 AM by shozoa
Filed under: , ,

Comments

OPC Diary said:

荒井省三のBlog : IronPython 2.0 における OLE Auto...

# April 16, 2008 12:58 AM
Leave a Comment

(required) 

(required) 

(optional)

(required) 

  
Enter Code Here: Required

Comment Notification

If you would like to receive an email when updates are made to this post, please register here

Subscribe to this post's comments using RSS

Page view tracker