hmPython 他の秀丸用言語シリーズと混ぜるhmPython3とhmPyの連携当サイトのhm**の言語シリーズは、1つのマクロで1つしか使えないわけではなく、混ぜて利用が可能となっています。 例えば、「ネイティブのPython」と「IronPython」との「(アウトプロセスではなく)インプロセス」での連携は、 hmPython3とhmV8との連携をやってみる以下では、
とを、インプロセスで処理をまぜこぜにしています。 秀丸マクロの変数環境空間を、 //------------------------------------------------------ // Python部分 //------------------------------------------------------ #PY = loaddll( hidemarudir + @"\hmPython3.dll" ); #_ = dllfuncw( #PY, "DoString", R"PY( from hmPython import * aaa = 1000 bbb = "あいうえお" hm.Macro.Var['#aaa'] = aaa # 秀丸マクロに数値として伝達 hm.Macro.Var['$bbb'] = bbb # 秀丸マクロに文字列として伝達 )PY" ); //------------------------------------------------------ // ここではfreedllせずに継続しておいて、最後にfreedllしている // freedll( #PY ); //------------------------------------------------------ // ECMAScript6のV8エンジン(.NET有り)の部分 //------------------------------------------------------ #ES = loaddll( hidemarudir + @"\hmV8.dll" ); #_ = dllfuncw( #ES, "DoString", R"ES( let aaa = hm.Macro.Var['#aaa'] // 秀丸マクロから受信 let bbb = hm.Macro.Var['$bbb'] // 秀丸マクロから受信 let lib = host.lib("System.Windows.Forms"); let Forms = lib.System.Windows.Forms Forms.MessageBox.Show( aaa.toString(), bbb, Forms.MessageBoxButtons.YesNoCancel, Forms.MessageBoxIcon.Information ); hm.Macro.Var['#aaa'] = aaa + 111; )ES" ); freedll( #ES ); //------------------------------------------------------ // また、Pythonへと戻ってくる // loaddllせずに、そのまま利用するので、前のPythonの続き扱いとなる // ちゃんとhmV8が行った値の変更も反映されている。 //------------------------------------------------------ #_ = dllfuncw( #PY, "DoString", R"PY( from hmPython import * ccc = hm.Macro.Var['#aaa'] # 秀丸マクロから受信 hm.debuginfo( aaa ) hm.debuginfo( ccc ) )PY" ); //------------------------------------------------------ // ここで freedll freedll( #PY ); hmPython3とhmPyとの連携をやってみるhmPythonは、いわゆる「最も普通のPython」ですので、 但し、この通常のPythonはあまりGUIが得意ではありません。 一方このようなものをフォローするものとして、IronPythonが存在します。 そこで、処理のコアは「hmPython3」で記述し、GUI付近だけ「hmPy」で記述する、 ちょうどC++とC#のような関係と言えるでしょう。 Python同士であるため、記述方法も一層一貫性がもてます。 //------------------------------------------------------ // Python部分 //------------------------------------------------------ #PY = loaddll( hidemarudir + @"\hmPython3.dll" ); #_ = dllfuncw( #PY, "DoString", R"PY( from hmPython import * aaa = 1000 bbb = "あいうえお" hm.Macro.Var['#aaa'] = aaa # 秀丸マクロに数値として伝達 hm.Macro.Var['$bbb'] = bbb # 秀丸マクロに文字列として伝達 )PY" ); //------------------------------------------------------ // ここではfreedllせずに継続しておいて、最後にfreedllしている // freedll( #PY ); //------------------------------------------------------ // IronPythonの部分 //------------------------------------------------------ #IPY = loaddll( hidemarudir + @"\hmPy.dll" ); #_ = dllfuncw( #IPY, "DoString", R"IPY( import clr import System aaa = hm.Macro.Var['#aaa'] # 秀丸マクロから受信 bbb = hm.Macro.Var['$bbb'] # 秀丸マクロから受信 clr.AddReferenceByPartialName("System.Windows.Forms") from System.Windows.Forms import * MessageBox.Show( str(aaa), bbb, MessageBoxButtons.YesNoCancel, MessageBoxIcon.Information ); hm.Macro.Var['#aaa'] = aaa + 111; )IPY" ); freedll( #IPY ); //------------------------------------------------------ // また、Pythonへと戻ってくる // loaddllせずに、そのまま利用するので、前のPythonの続き扱いとなる //------------------------------------------------------ #_ = dllfuncw( #PY, "DoString", R"PY( from hmPython import * ccc = hm.Macro.Var['#aaa'] # 秀丸マクロから受信 hm.debuginfo( aaa ) hm.debuginfo( ccc ) )PY" ); //------------------------------------------------------ // ここではfreedll freedll( #PY ); ここでは紙面の都合上、全て1つのマクロファイルに埋め込んでいますが、 |