IronPython 2.0 の OLE オートメーション・サポート

ShiroさんのブログにIronPython 2.0 Beta4でOLEオートメーションサポートがどのようになるかが詳しく解説されています。彼の記述した内容の概要は、以下のようなものです。

  • IronPython 1.x系では、オンザフライでインタロップ・アセンブリを生成するか、インタロップ・アセンブリを明示的に指定してCOMオブジェクトを使用する(チュートリアルにあるマーリンのデモがこれです)。
  • IronPython 2.0Beta3では、デフォルトでPIAかインタロップアセンブリを生成します(実際に私がBeta2で実験すると、-X:PreferComDispatchスイッチによってSystem.__ComObjectを使用していますし、Beta3ではスイッチが削除されています)。
  • IronPython 2.0Beta4では、デフォルトでSystem.__ComObejctを使用するようになります。-X:PreferComInteropAssemblyスイッチを使うことでインタロップ・アセンブリを使用するようになります(彼のブログでは、DLR_PreferComInteropAssembly環境変数と書かれています)。

DLR上のOLEオートメーション・サポートは、1)Type.GetTypeFromProgIDメソッド、2)clr.AddReferenceToTypeLibrary関数を使う方法と従来通りインタロップ・アセンブリを使用する方法になります。このような仕様にした理由として、VB6のCreateObject関数と同様の仕様にするためであると彼は説明しています。

ChageSet34570を使って試してみると彼のブログに記述されているような動作を確認することができました。但し、DLR_PreferComInteropAssembly環境変数だけは動作しませんでした。ソースコードを調べていくと、環境変数としてのサポート機能はまだ実装されていないようです。これ以外にもOLEオートメーション・サポートに関する内容がShiroさんのブログに記述されていますので、ご興味がある方は参照してください。