最終更新日 2024-09-25

hmPython3が持つ特別な関数一覧

デバッグ用途関数

デバッグ用途として以下の関数を利用し、「秀丸デバッグモニター」などに値や文字列を表示することが出来ます。

秀丸本体のバージョン

秀丸本体のバージョンを数値として取得します。

#PY = loaddll( hidemarudir + @"\hmPython3.dll" );
 
#_ = dllfuncw( #PY, "DoString", R"PY(

from hmPython import hm

hm.debuginfo(hm.version)

)PY"
);
 
freedll( #PY );

DestroyScope関数

Python内に「DestroyScope」という名前の関数を用意しておくと、
dll解放の直前にその関数が実行されます。

これは、少し時間が長くかかる処理をPython層で実行している最中に、
突如として「秀丸エディタ」を閉じてしまった、などの際にも呼び出されるという性質を持ちますので、
「この処理だけはクローズしておきたい」といった
「全体の処理のfinally句」的な意味で利用することが出来ます。

#PY = loaddll( hidemarudir + @"\hmPython3.dll" );
 
#_ = dllfuncw( #PY, "DoString", R"PY(

from hmPython import hm

def DestroyScope():
    hm.debuginfo("dll解放の直前に自動的にこの関数が呼び出される。\n")

)PY"
);
 
freedll( #PY );

ファイルを2つに分ける場合

.mac ファイルにDestoryScope()を直接記述しない場合、
モジュールに__main__へのメソッドを記述するような形になりますので、
以下のような形となるでしょう。

mytest.mac
#DLL = loaddll( hidemarudir + @"\hmPython3" );
#r = dllfuncw(#DLL, "DoString", "import mytest");
freedll(#DLL);
mytest.py
from hmPython import *

hm.OutputPane.Output("mytest_scope")



# __main__ スコープのDestroyScopeへと関数を代入する
import __main__
__main__.DestroyScope = lambda: MyDestroyScope()

def MyDestroyScope():
    hm.debuginfo("dll解放の直前に自動的にこの関数が呼び出される。\n")