IronPythonの例題のひとつとなります。
リストやタプルへののアクセス関数を確かめてみましょう。
#PY = loaddll( hidemarudir + @"\hmPy.dll" ); #_ = dllfuncw(#PY, "DoString", R"IPY( ary = [1, 2, 3] ary2 = [x*2 for x in ary] # ary2 = [2,4,6]となる )IPY" ); #target = dllfuncw(#PY, "GetNumItemOfList", "ary2", 2); // ary2[2]を数値として取得ということ message(str(#target)); #_ = dllfuncw(#PY, "SetStrItemOfList", "ary2", 2, "abc"); // ary2[2] = "abc"ということ $ary2 = dllfuncstrw(#PY, "GetStrVar", "ary2"); // ary2全体を文字列として取得。 message($ary2); #_ = dllfuncw(#PY, "DoString", "ary2 = tuple(ary2)"); // リストを読み取り専用となるタプルに変更 $ary2 = dllfuncstrw(#PY, "GetStrVar", "ary2"); // 再度、タプルにしたary2全体を文字列として取得。 message($ary2); freedll( #PY );
何もリストやタプルだけではありません。
とにもかくにも obj[index]でindexは整数ということが前提の形を満たしてれば良いのです。
以下のような myindex.pyを作成し・・・・
class MyIndexClass: def __getitem__(self, index): return index * 100 my_index_obj = MyIndexClass()
次のようなマクロや関数の使い方も問題なく成立します。
#PY = loaddll( hidemarudir + "\\" + "hmPy.dll" ); #_ = dllfuncw(#PY, "DoFile", currentmacrodirectory + "\\myindex.py"); #num = dllfuncw(#PY, "GetNumItemOfList", "my_index_obj", 30); // my_index_obj[30] を得る message(str(#num)); freedll( #PY );