次に、Scene.xamlを以下のように修正する(太字部分が追加分)。


<Canvas
           xmlns="http://schemas.microsoft.com/client/2007"
           xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
           Width="640" Height="480"
           Background="White"
           >
           <x:Code Source="Default.xaml.py" Type="text/ironpython" />
           <x:Code Source="Default.xaml.jsx" Type="text/jscript" />
           <TextBlock Width="320" Height="408" Canvas.Left="152" Canvas.Top="24" Text="TextBlock" TextWrapping="Wrap" x:Name="text1" MouseLeftButtonDown="OnClick"/>
</Canvas>

次に、Default.xaml.pyを一部変更する(太字部分が追加分)。


from datetime import *

def OnClick(sender, e):
    text1.Text = "%s\n%s: %s" % (text1.Text, datetime.now().strftime("%H:%M:%S"), CallJS("Hello MYCOM"))

次に、新たに Default.xaml.jsxを作成する。


function CallJS(msg) {
    return msg + " for JScript=" + Math.round(Math.random() * 10);
}

修正したプログラムを早速実行してみよう。

シームレスに相手側の関数が呼び出せている

修正したプログラムの動作を簡単に解説する。

  • Scene.xamlがロードされる時、タグ内に記述された、Default.xaml.pyとDefault.xaml.jsxが、IronPythonとJScriptの制御プログラムとして読み込まれる
  • Scene.xamlのテキストボックス(text1という名前)の上でマウスを左クリックすると、IronPythonで記述されたOnClick関数が呼ばれる
  • OnClick関数内で、さらにJScriptで記述されたCallJS関数が呼ばれる
  • CallJS関数の戻り値と合わせて、テキストボックスの値(text1.Text)を操作して出力する

見ての通り、異なる言語にもかかわらず何の手続きもなしにシームレスに相手側の関数が呼び出せていることが分かる。

このことから、DLRという技術基盤により、将来IronRubyやVBxなど各種言語で作成したプログラムを相互に呼び出せるようになることが予想できるだろう。